PDA

View Full Version : سوال: مشکل در کپی فایل در برنامه سی شارپی



barman.ar16
جمعه 04 آبان 1397, 20:54 عصر
سلام دوستان
من توی برنامه برای ذخیره عکس دانش آموزان از روش کپی فایل درون یک پوشه کنار پروژه با نام کدملی هر کدام استفاده کردم (برای جلوگیری از بالا رفتن حجم دیتابیس)
خب برای درج عکس ابتدا یک فرم نمایش میدم که اطلاعات دانش آموزان رو داخل دیتاگریدویو نمایش میده
و همچنین عکس هر کدام رو اینطوری پیدا می کنم و درون دیتاگریدویو کنار اطلاعاتش نمایش میدم


Bitmap img;
try
{
for (int i = 0; i < rgv.Rows.Count; i++)
{

melli = rgv.Rows[i].Cells[1].Value.ToString();
img = new Bitmap(Application.StartupPath + @"\pic" + melli + ".jpg");
rgv.Rows[i].Cells[0].Value = img;
rgv.Rows[i].Height = 100;
}
}
catch (Exception)
{
return;
}


تا اینجا مشکلی نیست
بعد با دوبار کلیک اطلاعات رو میفرستم برای فرم بعدی که میخوایم اونجا عکس رو از کاربر بگیریم
عکس رو با openfiledialoge از کاربر میگیرم و با نام کد ملی اش درون همون پوشه ذخیره می کنم
خب حالا مشکل :
اگر عکسی برای این دانش آموز وجود نداشته باشه که مشکلی پیش نمیاد اما اگر وجود داشته باشه خطا میگیره و نمیذاره عکس جدید جایگزین بشه
این خطا رو میده : که فایل در حال استفاده در جای دیگری است the file using in another process

اولش فکر کردم مشکل برای اینه که عکس رو درون یک پیکچر باکس همون فرم نمایش میدم
اما مشکل اون نیست و به خاطر اینه که قبلش عکس فراخوانی شده و درون دیتاگریدویو نمایش داده شده
حالا چطور میتونم فارغ از اون قضیه فایل جدید رو در واقع overwrite کنم
متشکرم

ژیار رحیمی
شنبه 05 آبان 1397, 09:55 صبح
سلام این کدو تست بزن ببین مشکل حل میشه

Bitmap img;
try
{
for (int i = 0; i < rgv.Rows.Count; i++)
{

melli = rgv.Rows[i].Cells[1].Value.ToString();
using (var fs = new System.IO.FileStream(Application.StartupPath + @"\pic" + melli + ".jpg", System.IO.FileMode.Open))
{
var bmp = new Bitmap(fs);
rgv.Rows[i].Cells[0].Value = (Bitmap) bmp.Clone();
}
rgv.Rows[i].Height = 100;
}
}
catch (Exception)
{
return;
}

barman.ar16
شنبه 05 آبان 1397, 18:30 عصر
سلام این کدو تست بزن ببین مشکل حل میشه

Bitmap img;
try
{
for (int i = 0; i < rgv.Rows.Count; i++)
{

melli = rgv.Rows[i].Cells[1].Value.ToString();
using (var fs = new System.IO.FileStream(Application.StartupPath + @"\pic" + melli + ".jpg", System.IO.FileMode.Open))
{
var bmp = new Bitmap(fs);
rgv.Rows[i].Cells[0].Value = (Bitmap) bmp.Clone();
}
rgv.Rows[i].Height = 100;
}
}
catch (Exception)
{
return;
}





نمیدونم چرا گزینه تشکر برای من دیده نمیشه ... به هر حال
ممنون استاد رحیمی عزیز
اگر کسی به این مشکل به هر نحو دیگه ای برخورد میتونه از این روش با کمی تغییرات استفاده کنه
باز هم ممنون