PDA

View Full Version : جایگزین کردن فایل در مسیر برنامه



kebriya
دوشنبه 29 آذر 1389, 11:16 صبح
کنار فایلهای برنامه یه پوشه ای گذاشتم که یه سری عکس داخلش است. در برنامه یه سری picturebox دارم که این عکسها رو نمایش میده حالا اگه کاربر یکی از این عکس ها رو از طریق برنامه تغییر بده میخوام این عکس با همون نام قبلی در اون پوشه قرار بگیره که من با کد زیر گفتم عکس قبلی رو پاک کنه و عکس جدید رو کپی کنه


If IO.File.Exists(axadd) Then
IO.File.Delete(axadd)
End If
IO.File.Copy(ax, axadd)


که خطای زیر رو میده
The process cannot access the file 'F:\Zabankade\Zabankade\bin\Debug\pics\6\ax.jpg' because it is being used by another process.

taghi.km
دوشنبه 29 آذر 1389, 11:57 صبح
یه راه حل نل مناسب رو تست کن قبل از اینکه کپی کنی این دستور رو بنویس ببین جواب میده

thread.sleep(number)

kebriya
دوشنبه 29 آذر 1389, 12:08 عصر
ممنون ولی درست نشد بازهم همون خطا رو میده

taghi.km
دوشنبه 29 آذر 1389, 13:51 عصر
عدد رو کمی بالا بگیر همچنین میتونی از using هم استفاده کنی

kebriya
دوشنبه 29 آذر 1389, 17:09 عصر
عدد رو بالا گرفتم ولی باز هم نشده مثلا چند بگیرم؟ راستی شما تست کردین جواب گرفتین؟

mahdi1373
دوشنبه 29 آذر 1389, 20:58 عصر
سلام. مشكل اينه كه وقتي Picture box داره عكس رو نشون ميده مستقيما داره ازش استفاده ميكنه. پس نميشه اوونو پاك كرد.
قبل از اينكه ستور delete رو بدي. كد زير رو بزن:


PictureBox1.Image.Dispose()

بجاي PictureBox1 هم نام picture box ات رو بزار.

kebriya
سه شنبه 30 آذر 1389, 10:36 صبح
این رو قبلا تست کرده بودم نشد:گریه:

kebriya
چهارشنبه 01 دی 1389, 10:15 صبح
یکی به داد من برسه تروخدا. کارم گیره

محسن شامحمدی
چهارشنبه 01 دی 1389, 17:21 عصر
الان رو اين سيستم vs نصب نيست كه كد دقيق بگم ولي فكر كنم اينطوري يا حداقل با اين روش كار كنه
PictureBox1.Image=nothing
PictureBox1.Image=new image()

sharifat
چهارشنبه 22 دی 1389, 13:47 عصر
الان رو اين سيستم vs نصب نيست كه كد دقيق بگم ولي فكر كنم اينطوري يا حداقل با اين روش كار كنه
PictureBox1.Image=nothing
PictureBox1.Image=new image()


سلام
مشكل من هم دقيقا همينه، اما هنوز نتونستم چاره اي براش پيدا كنم
اين روشي كه شما فرموديد هم چاره ساز نبود
راه ديگه اي نيست؟؟؟؟؟

omid-vbAuto
چهارشنبه 22 دی 1389, 14:17 عصر
دوستان و اساتید عزیز هم کمکی کنند.این مسئله چندین بار مطرح شده ولی کسی جوابی پیدا نکرده.

امیدوارم تو این تاپیک به جواب برسیم.

omid-vbAuto
پنج شنبه 23 دی 1389, 10:14 صبح
اخیرا اعضاء سایت خیلی کم لطف شدن . فقط میان یه حکایت میگنو میرن!!!

لطفا دوستانی که در این زمینه اطلاعاتی دارن کمک کنن چیزی ازشون کم نمیشه.

دوستانی هم که اطلاعاتی در این مورد ندارن و می خوان اطلاعاتی کسب کنن ، لطفا حداقل بیان پیام های Off بذارن تا تاپیک پایین نره.

خلاصه الان وضیعت سایت خوب نیست. اکثرا بیشتر تاپیکها بی پاسخ هستن!!!!

sina_saravi1
پنج شنبه 23 دی 1389, 10:55 صبح
به نظر من شما تو تابع جایگزین کردن عکسا باید قبلش عکس تمام پیکچر باکس هات به یه عکس دیگه تغییر بده و بعد از جابه جا کردن به حالت اول برگردون
به نظر من این باید جواب بده

omid-vbAuto
پنج شنبه 23 دی 1389, 11:01 صبح
به نظر من شما تو تابع جایگزین کردن عکسا باید قبلش عکس تمام پیکچر باکس هات به یه عکس دیگه تغییر بده و بعد از جابه جا کردن به حالت اول برگردون
به نظر من این باید جواب بده

فکر کنم جواب بده ولی باید امتحانش کرد.دوستان کسی این کارو کرده؟

hossein-khoshseyar
پنج شنبه 23 دی 1389, 15:06 عصر
فکر کنم جواب بده ولی باید امتحانش کرد.دوستان کسی این کارو کرده؟
پاسخ منفیه
این روش هم جواب نمیده

omid-vbAuto
پنج شنبه 23 دی 1389, 17:35 عصر
پاسخ منفیه
این روش هم جواب نمیده

خوب مهندس جان یه بار عکس رو دیسپوس کن و بعدش یه عکس دیگه بده بجاش و در انتها اون عکسه دیسپوس شده رو پاک کن.اینو امتحان کن ببین جواب میده؟

Saman_12
پنج شنبه 23 دی 1389, 17:48 عصر
شما با چه کدی عکس رو لود میکنید؟( کد رو اینجا قرار دهید. )

omid-vbAuto
پنج شنبه 23 دی 1389, 18:18 عصر
شما با چه کدی عکس رو لود میکنید؟( کد رو اینجا قرار دهید. )

با این:



PictureBox1.Load("E:\0007.jpg")

Saman_12
پنج شنبه 23 دی 1389, 18:38 عصر
میشه بگی اصلا مشکل چیه اگر با این کد فایل رو لود میکنی که فقط پیکچرباکس عکس رو میخونه بعد فایل رو میبنده.(بنا بر این خطای استفاده شدن تصویر توسط برنامه دیگه وجود نداره.)

2.کد صفحه ی اول یک فایل رو دلیت میکنه که تصویر قبلیه که تا اینجا مشکلی نیست!و بعد هم فایل جدید رو کپی میکنه!!!!
چرا کپی چرا یعد از حذف عکس از دستور سیو بیت مپ استفاده نکردین؟؟


PictureBox1.Load("C:\1.jpg")

Dim Eg As Graphics = Graphics.FromImage(PictureBox1.Image)

Eg.FillRectangle(Brushes.AliceBlue, New Rectangle(50, 50, 200, 200))
File.Delete("C:\1.jpg")
PictureBox1.Image.Save("C:\1.jpg")

kebriya
پنج شنبه 23 دی 1389, 20:50 عصر
ممنون آقا سامان من این رو چک میکنم نتیجه رو میگم. راستش منم تو سایت msdn یه چیزایی پیدا کردم ولی به نتیجه نرسیدم

kebriya
شنبه 25 دی 1389, 09:36 صبح
مرسی مهندس مشکل من با گزینه اول حل شد. دستت درد نکنه

omid-vbAuto
شنبه 25 دی 1389, 10:35 صبح
مرسی مهندس مشکل من با گزینه اول حل شد. دستت درد نکنه

خوب کد نهائی رو بذار ببینیم چی از آب در امد.

sharifat
شنبه 25 دی 1389, 10:42 صبح
من هم منتظر اعلام نتيجه هستم

kebriya
شنبه 25 دی 1389, 11:11 صبح
اول موقع لود عکس از گرید به picturebox از دستور زیر استفاده میکنیم:(یعنی بجای دستور image از Load استفاده می کنیم)


Pic.Load(DataGridView1.Rows(i).Cells(16).Value.ToS tring)

موقع کپی عکس از کد زیر استفاده می کنیم:


IO.File.Copy(مسیر1, مسیر2, True)

sharifat
شنبه 25 دی 1389, 11:29 صبح
اول موقع لود عکس از گرید به picturebox از دستور زیر استفاده میکنیم:(یعنی بجای دستور image از Load استفاده می کنیم)


Pic.Load(DataGridView1.Rows(i).Cells(16).Value.ToS tring)

موقع کپی عکس از کد زیر استفاده می کنیم:


IO.File.Copy(مسیر1, مسیر2, True)

خيلي ممنون دوست عزيز
من فعلاً برنامه باهام نيست. اما امتحان ميكنم، انشالله كه براي من هم جواب بده .:لبخندساده:

kebriya
شنبه 25 دی 1389, 11:32 صبح
واسه delete کردن عکس هم باید کد زیر رو بنویسیم:(همونجوری که مهندس گفتن)



Dim Eg As Graphics = Graphics.FromImage(PictureBox1.Image)
Eg.FillRectangle(Brushes.AliceBlue, New Rectangle(50, 50, 200, 200))
File.Delete(مسیر عکس)

omid-vbAuto
شنبه 25 دی 1389, 11:57 صبح
واسه delete کردن عکس هم باید کد زیر رو بنویسیم:(همونجوری که مهندس گفتن)



Dim Eg As Graphics = Graphics.FromImage(PictureBox1.Image)
Eg.FillRectangle(Brushes.AliceBlue, New Rectangle(50, 50, 200, 200))
File.Delete(مسیر عکس)



برای Delete کردن قطعه کد زیر چه لزومی داشت؟؟؟



Dim Eg As Graphics = Graphics.FromImage(PictureBox1.Image)
Eg.FillRectangle(Brushes.AliceBlue, New Rectangle(50, 50, 200, 200))

Saman_12
شنبه 25 دی 1389, 12:12 عصر
برای Delete کردن قطعه کد زیر چه لزومی داشت؟؟؟



Dim Eg As Graphics = Graphics.FromImage(PictureBox1.Image)
Eg.FillRectangle(Brushes.AliceBlue, New Rectangle(50, 50, 200, 200))


این کد لازم نیست من فقط خواستم نشون بدم که روی فایل تغییر ایجاد کردم.(تنها همون دلیت کافیه.)

sharifat
شنبه 25 دی 1389, 16:25 عصر
وااااي برا من هم جواب داد
از همه دوستان ممنونم، لطف خيلي بزرگي در حق من كرديد

hero4000
یک شنبه 26 دی 1389, 09:13 صبح
دوستان اگه ميخوان از طريق Image عکسي رو لود کنند که برنامه روي اون دست نذاره و تغييرات رو بشه دوباره ذخيره کرد مي تونند از کد زير استفاده کنند


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim op As New OpenFileDialog
op.ShowDialog()
Dim b() As Byte
b = IO.File.ReadAllBytes(op.FileName)
Dim mm As New IO.MemoryStream
mm.Write(b, 0, b.Length)
PictureBox1.Image = Image.FromStream(mm)
End Sub

MortezaGity
یک شنبه 26 دی 1389, 10:15 صبح
از خاصیت ImageLocation مربوط به PictureBox استفاده کن ببین میشه.


PictureBox1.ImageLocation=""


بعد اون کاری رو که میخوای کنی بکن.