PDA

View Full Version : سوال: خطا The process cannot access the file because it is being used by another process در دسترسی به فایل



Bahar_HS
دوشنبه 20 تیر 1390, 15:14 عصر
باسلام
یه برنامه نوشتم که درست اجرا می شد،یه کپی از برنامه رو هم روی حافظه فلشم ریختم،ولی چند روزی که برنامه ای که رو ی سیستممه موقع اجرا این Error رو میده،در صورتی که برنامه ی روی حافظه فلشم هنوز درست اجرا میشه،




System.IO.IOException:The process cannot a access the file//...path Directory....\\ because it is being used by another process


اینم تابع مربوط به این Error:




private void SetPictures(PictureBox picture, Label lable,int index)
{
byte[] barrImg = (byte[])DT.Rows[index]["Picture"];
//
string strfn = Convert.ToString(DateTime.Now.ToFileTime());
FileStream fs = new FileStream(strfn, FileMode.CreateNew, FileAccess.Write);
fs.Write(barrImg, 0, barrImg.Length);
fs.Flush();
fs.Close();
//
picture.Image = Image.FromFile(strfn);
lable.Text = DT.Rows[index]["Name"].ToString();
}


دلیل این جور اشکالات که گه گاه در کدنویسی پیش میاد چیه و چطور میشه حلشون کرد که دیگه این اشکالات در برنامه تکرار نشه؟؟؟:متفکر:

haghft
سه شنبه 21 تیر 1390, 13:15 عصر
شما برای اون قسمت picture.Image = Image.FromFile(strfn); از fromfile استفاده نکن از fromstream استفاده کن شبیه اون عملیات مافوقش.

immortal1990
سه شنبه 21 تیر 1390, 17:54 عصر
سلام
واقعا گیچ شدم خواهشا کمک کنید
من تو برنامه ام از دستور کپی استفاده کردم که یه عکس رو از یه مسیر دلخواه کاربرر به مسیر مقصد که یه مسیر ثابتیه کپی میکنم فقط نام فایلو از یه ماسکت تکس باکس میگیرم(که یه عدد 10 رقمی فقط میگیره) در زمان کپی اگه نام فایل با تکس باکس بگیرم مثل زیر
NewAddress = "F:\\Amg\\"+txtCode.Text+".jpg";
پیغام خطا میده
The process cannot access the file 'F:\Amg\1899999999.jpg' because it is being used by another process.
ولی اگه به صورت زیر بگیرم دقیقا همه به صورت استرینگ باشه مثل زیری
NewAddress = "F:\\Amg\\1899999999.jpg";
بهم پیغام خطا رو نمیده و فایلو کپی میشه (خیلی اذیتم کرده بخدا)
بهم بگیت چرا؟؟؟

Bahar_HS
چهارشنبه 22 تیر 1390, 17:17 عصر
با سلام
برنامه Debug میشه ولی با نمایش این پیام و با اشکال،(یعنی با اینکه روند منطقی برنامه درسته و قبلا هم بدون هیچ اشکالی اجرا می شده)ولی حالا قاطی می کنه و درست اجرا نمی شه،یه مسئله ی دیگه اینکه،DT،دیتاتیبل برنامه است و هر بار که تصویری از دیتاتیبل برای نمایش درpictureBox قرار داده میشه،همان فایل در پوشه ی bin/Debuge کپی می شه، و بعد از چندبار اجرا،پوشه یbin/Debuge حاوی چندین کپی از فایلهای آورده شده از دیتاتیبل میشه، چنین چیزی در برنامه نرماله یا غیر نرمال؟

immortal1990
پنج شنبه 30 تیر 1390, 23:15 عصر
سلام به برنامه نویسان حرفه ای
یه فایل دارم که وقتی میخوام Move کنم در واقع یجور رینیم کردنه انجام بدم پیغام زیر رو میده البته فقط وقتی که اسم فایل رو از یه تکس باکس بگیرم اینطور میشه
The process cannot access the file
ولی اگه کلا اسمو به صورت یه رشته تو خود برنامه تعریف کنم پیغامی نمیده و کار به راحتی انجام می شه

//PicName=نام مسیر کامل عکسی که کاربر انتخاب میکنه
//ImgPath=یک مسیر ثابتی که همه عکسها به اونجا منتقل میشن
if (PicName != string.Empty)
{
string NewAddress;
string OldAddress=PicName;
nameImage = "Pic"+TxtCode.text+".jpg";
NewAddress = ImgPath + LblCode.Text;
File.Copy(OldAddress,NewAddress , true);
}
تو این تکه کد دقیقا تو قسمت File.Copy(OldAddress,NewAddress , true خیلی اذیت میکنه و پیغام
The process cannot access the file
میده البته فقط زمانی که از یه تکس باکس اطلاعاتو که یه عدد 10 رقمی میگیرم خطا رو میده ولی اگه همون عدد 10 رقمی تو خود برنامه تعریف کنم به راحتی کپی میشه

Esmail Solhkhah
یک شنبه 02 مرداد 1390, 14:00 عصر
بین ImgPath , lblCode.text از '\\' استفاده کن

immortal1990
یک شنبه 02 مرداد 1390, 15:23 عصر
متاسفانه مشکل این نیست
مسیری که بهش دادم درسته
ImgPath=@"F:\C#‎‎\1390\Amozeshgah\Amozeshgah\Pics\";
راستی یچیز دیگه زمانی این پیغام خطا رو میده که یه فایل دیگه ای با همین اسم وجود داشته باشه
The process cannot access the file 'F:\C#‎‎\1390\Amozeshgah\Amozeshgah\Pics\Pic18 99999999.jpg' because it is being used by another process.

morteza271
یک شنبه 02 مرداد 1390, 15:51 عصر
دوست عزیز شما که نام فایل رو در متغیر nameImage میریزید پس چرا بعد به NewAddress متن LblCode رو اضافه میکنید؟
این قسمت از کدتون رو میگم :

nameImage = "Pic"+TxtCode.text+".jpg";
NewAddress = ImgPath + LblCode.Text;

immortal1990
یک شنبه 02 مرداد 1390, 16:00 عصر
ببخشید یه چیز اضافه بود آخه خود lblCodeهم همون مقدار تکس کدو داشت اصلاح شد ولی بازم پیغام خطا The process cannot access the file
میده وای چکار کنم اینم امتحان کردم باز نمیشه؟؟؟؟

//Copy Image To Pics Folde
if (PicName != string.Empty)
{
string NewAddress= ImgPath+"Pic" +txtCode.Text + ".jpg";
string OldAddress=PicName;
if (NewAddress!=OldAddress)
{
File.Copy(OldAddress,NewAddress , true);
}
}

morteza271
یک شنبه 02 مرداد 1390, 16:11 عصر
عجیبه!
قبل از اینکه copy کنید چک کنید ببینید آدرس هایی که بهش پاس میدین درسته،مثلا بذارین یه MessageBox نمایش بده.
اگه درست بود اگه امکانش هست برنامتون رو بذارین اینجا تا اگه بتونم درستش کنم.

immortal1990
یک شنبه 02 مرداد 1390, 17:06 عصر
کل برنامه همینه منتها مسیر Picnameاز کاربر میگیره با OpenFileDialog
و به مسیر ImgPath=@"F:\c#\1390\Amozeshgah\Amozeshgah\Pics\";

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

quantomquery
دوشنبه 03 مرداد 1390, 16:03 عصر
سلام
همونی که گفتین ساختم و لی خطایی نداد !!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ضمیمه

alireza264
دوشنبه 03 مرداد 1390, 20:31 عصر
قبل از مسیر @ بذار

nameImage = "Pic"+TxtCode.text+".jpg";
NewAddress =@ (ImgPath + LblCode.Text);

immortal1990
سه شنبه 04 مرداد 1390, 00:44 صبح
سلام
همونی که گفتین ساختم و لی خطایی نداد !!!!!!!!!!!!؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟ ضمیمه

مرسی عزیز اینکه وقت گذاشتی راستش واسه منم مشکلی ایجاد نمیکنه برنامه که دادی ولی دقیقا همین کد تو برنامه که گذاشتم بهم گیر میده عدم دستترسی به فایل به هر حال مرسی

immortal1990
سه شنبه 04 مرداد 1390, 18:03 عصر
مهندس جان کمک کن!!!
آقا منتاحدودی مشکل کدموپیدا کردم
من توی برنامه ام یه دیتاگریدویوو PixtuersBoxدارم که توی هر ردیف مقداری مشخصات و فقط یه نام فایل نه مسیر کامل که هر وقت روی ردیف خاص کلیک کنم ستونی که اسم فایلو نگه داشته با یه مسیر مشخص که قبلا بهش داده بودم جمع بشه و عکسو تو پیکچرباکس نشون بده تا اینجا هیچ مشکلی ندارم و برنامه به خوبی اجرا میشه منتها تویه برنامه ام یه باتن ویرایش گذاشتم که عکس کاربر و آپدیت کنه (مثلا بتونه عکس جدیدی واسه خودش انتخاب کنه و جای عکس اصلی تو مسیر که قبلا بهش داده بودم قرار بگیره) ولی بهم پیغام میده که عکس قبلی هنوز در حال استفاده میباشه و نمی شه Replaceکنیش از خود ویندوز فهمیدم که پیغام که داده مربوط به برنامه خودمه که درحال اجراست پیغامش دقیقا همینه
Cant Complate The Moving Becuase The File Is Open in vshodt.exe
خواهشا راهنمایی کنید که چطور عکس رو از برنامه آزاد کنم که بهش کاری نداشته باشه

uness12
شنبه 01 تیر 1392, 20:32 عصر
سلام ، هنگام حذف عکس با ارور The process cannot access the file 'C:\Users\REZA\Desktop\s\rajaee\rajaee\bin\Debug\I mage\Ferestade\1.jpg' because it is being used by another process.
مواجع میشوم یک راه حل پیشنهاد بدید لطفا.

mehdy.programmer
شنبه 01 تیر 1392, 20:41 عصر
دوست عزیز این ارور به دلیل درگیر بودن عکس در یه برنامه بوجود میاد. شما باید ببینید که چه process داره از عکس استفاده میکنه ، یا پروسس رو ببندید یا عکس رو از برنامه خارج کنید. من احتمال میدم که برنامه ی خودتون داره از عکس استفاده میکنه...

uness12
شنبه 01 تیر 1392, 20:48 عصر
همینه طوره برنامه خودم داره از عکس استفاده میکنه ، یک پیکچر باکس دارم که این عکسو لود میکنه ولی موقع حذف فایل مقدار image اونو null میکنم ولی بازم ایراد داره آیا کدی هست که بشه پراسس رو بست؟

mehdy.programmer
شنبه 01 تیر 1392, 22:16 عصر
من تست کردم متوجه شدم که ویژوال استدیو داره از عکس استفاده میکنه نه برنامه شما... شما اگه برنامه تون رو مستقیم اجرا کنید دچار مسکل نمیشید...

mousa1992
شنبه 01 تیر 1392, 22:28 عصر
دو راه
1- از خاصیت image location استفاده کن برا نشون دادن عکست تو pictureBox
2 - عکسو ببری تو حافظه و بدی به pictureBox - با استفاده از memoryStream

موفق باشی

Pedram_Parsian
شنبه 26 مرداد 1392, 12:57 عصر
با سلام به همه!
من داشتم برنامه ی دفترچه تلفن رو می نوشتم
توی این برنامه یک بخش register درست کردم که برای فعال سازی برنامه بود که وقتی کاربر داخل فرم اصلی برنامه بر روی دکمه install کلیک می کرد علاوه بر فایل های اصلی برنامه یک فایل به نام Register.dat در درایو c و در فولدر PhoneBook درست می کرد. در خط بعد برنامه داخل این فایل متن "Not Register" را قرار می داد و ...
در هنگام اجرای برنامه هنگامی که روی دکمه install کلیک می کردم یک error زمان اجرا رخ می داد:
The process cannot access the file 'C:\PhoneBook\Register.dat' because it is being used by another process.
این هم کد دکمه install :


109231
لطفا مرا راهنمایی کنید :چشمک:

royall
شنبه 21 دی 1392, 21:34 عصر
سلام
من میخواستم عکسی رو که سی شارپ باز کردم و روی عکس تغییرات دادم رو روی خودش ذخیره کنم
با save as مشکلی ندارم با save روی خودش مشکل دارم میشه راهنمایی کنید.

erfan_urchin
یک شنبه 22 دی 1392, 00:21 صبح
خب شما میتونید وقتی کاربر عکس مورد نظر رو از پنجره Open File Dialog انتخاب کرد شما همون لحظه آدرس عکس رو بریزی توی یه دونه string و وقتی save رو زد شما تو کدنویسی کاری کنی که برنامه بره تو اون آدرس عکس موردنظر رو حذف کنه و این عکس رو اونجا save کنه. این دقیقا همون چیزیه که تمام برنامه های دیگه انجام میدن موقع save کردن
با کد زیر میتونی آدرس عکس رو پیدا کنی
string s = OpenFileDialog1.FileName;
موفق باشی

royall
یک شنبه 22 دی 1392, 11:13 صبح
خب شما میتونید وقتی کاربر عکس مورد نظر رو از پنجره Open File Dialog انتخاب کرد شما همون لحظه آدرس عکس رو بریزی توی یه دونه string و وقتی save رو زد شما تو کدنویسی کاری کنی که برنامه بره تو اون آدرس عکس موردنظر رو حذف کنه و این عکس رو اونجا save کنه. این دقیقا همون چیزیه که تمام برنامه های دیگه انجام میدن موقع save کردن
با کد زیر میتونی آدرس عکس رو پیدا کنی
string s = OpenFileDialog1.FileName;
موفق باشی


سلام مرسی عرفان جان این کارو قبلا کردم و نیازی هم به تعریف متغیر نیست چون یه بار عکس باز میشه و openfile dialog.filename هم تغیرر نمیکنه ولی جواب نداد.



string s = OpenFileDialog1.FileName;
img.save(s);// or img.save(openfiledialog.filename)


کلا به آرگومان داخلی save خطا میده میگه این ادرس مشکل داره چون ادرس داخلش با تک اسلش ذخیره شده و save باید با دابل اسلش باشه.
please help me

hamid_hr
یک شنبه 22 دی 1392, 11:26 صبح
کلا به آرگومان داخلی save خطا میده میگه این ادرس مشکل داره چون ادرس داخلش با تک اسلش ذخیره شده و save باید با دابل اسلش باشه.
اينو كي ميگه؟
c# ميگه يا شما؟

royall
یک شنبه 22 دی 1392, 22:55 عصر
سی شارپ میگه نه منخطا میده.اگه نمیداد که مشکلی نداشتم.

erfan_urchin
چهارشنبه 25 دی 1392, 10:01 صبح
نه اصلا ربطی به تک اسلش بودن نداره
فکر میکنم مشکل اینه که شما از SaveFileDialog استفاده نمیکنید!!! شما بجاش دارین از همون OpenFileDialog استفاده میکنید
شما اول برای ذخیره یه دونه SaveFileDialog باز کن بعد این کد رو هم بنویس ببین اینم خطا میده؟؟؟
img.Save(saveFileDialog1.FileName, ImageFormat.Jpeg);
اگه اینم خطا داد لطفا متن خطا رو بزار تا ببینیم چی میگه
موفق باشی

royall
چهارشنبه 25 دی 1392, 23:14 عصر
ممنون عرفان جان.من تو پست اول نوشتک که با save as که با savefiledialog هست مشکلی ندارم من میخام save کنم یعنی یه تصویر بعد اعمال تغییرات save که بزنی بدون اینکه پنجره ای باز بشه مستقیم رو خود عکس اصلی مجددا ذخیر بشه.

erfan_urchin
پنج شنبه 26 دی 1392, 23:41 عصر
شما بیا اینو بنویس تو کدات باور کن درست میشه :لبخند: (البته اگه جای دیگه اشکال نداشته باشه :لبخند: )
using System.IO
FileInfo f = new FileInfo(openFileDialog1.FileName);
f.Delete();
img.Save(OpenFileDialog1.FileName, ImageFormat.Jpeg);
حالا من نمیدونم شما img رو چجوری گرفتین. منظورم اینه که img شی ساخته شده از چیزیه؟؟؟
شما اون کدایی که دادمو بنویس ایشالا که درست شه اگه نشد حتما متن خطا رو اینجا بنویس شاید مشکل از چیز دیگه باشه

royall
جمعه 27 دی 1392, 00:30 صبح
سلام روی خود delete خطا میده.

The process cannot access the file 'C:\Users\royall\Desktop\111.png' because it is being used by another process.

NasimBamdad
جمعه 27 دی 1392, 01:54 صبح
سلام روی خود delete خطا میده.

The process cannot access the file 'C:\Users\royall\Desktop\111.png' because it is being used by another process.

منم این مشکل رو دارم ، وقتی با این SaveDialog کار می کنم !

royall
چهارشنبه 16 بهمن 1392, 21:55 عصر
کسی نیست سوال مارو حل کنه؟

majid_i68
پنج شنبه 17 بهمن 1392, 08:56 صبح
این خطا برای این هست که تصویری که میخواهید حذف کنید ..توسط برنامه دیگه ..استفاده میشه

h_jafarnezhad
پنج شنبه 17 بهمن 1392, 09:28 صبح
سلام
ميتوني اول فايل رو با يك نام ديگه ذخيره كني بعد از اين كه فايل قبل رو بستي فايل رو حذف كني و فايل كه ذخيره كردي تغيير نام بدي اين يه راهه

NasimBamdad
پنج شنبه 17 بهمن 1392, 14:23 عصر
یک سر به اینجا بزن

http://support.microsoft.com/kb/309482

sara_traveler
دوشنبه 29 اردیبهشت 1393, 12:14 عصر
سلام
من عکس ها رو در یک پوشه ذخیره میکنم و ادرس اونها در دیتابیس

هنگام لود فرم مسیرها در گرید نمایش میدم و روی هر عکس کلیلک کنن همون عکس در piturebox مشاهده می کنند
حالا می خوام همون عکس پاک کنم
File.Delete( dataGridView1 .CurrentRow .Cells ["name_ax"].Value .ToString () );
اما خطا میده که این عکس داره در جایی استفاده میشه
حتی

pic_scaned.Image = null;
pic_scaned.Refresh();
گذاشتم اما باز هم خطا میده

باید چیکار کنم

h_assefi
دوشنبه 29 اردیبهشت 1393, 12:39 عصر
سلام دوست عزیز
اگر مقدار دهی Image=null کار نمی کنه می تونی مقدار picturebox.initialimage = null قرار بدی
به احتمال زیاد از این متد برای بارگذاری استفاده شده و بهمین علت picturebox.image=null کار نمی کنه

موفق باشید

sara_traveler
دوشنبه 29 اردیبهشت 1393, 12:51 عصر
باز هم خطا میده
The process cannot access the file '...' because it is being used by another process.

hamid_hr
دوشنبه 29 اردیبهشت 1393, 13:02 عصر
کد لود رو میشه بزارین؟

sara_traveler
دوشنبه 29 اردیبهشت 1393, 13:30 عصر
در لود یک select نوشتم و گرید با اون پر کردم

مشکل در اینجا هست
که اگر این خط من غیر فعال کنم حذف به درستی انجام میشه

private void dataGridView1_MouseUp(object sender, MouseEventArgs e)
{
try
{
pic_scaned.Image = Image.FromFile(dataGridView1 .CurrentRow .Cells ["name_ax"].Value .ToString ());
}
catch { }
}
اما اگر این کدها بردارم دیگه با جابه جایی روی سطر گرید نمیتونیم عکس ها را در picturebox ببینیم

hamid_hr
دوشنبه 29 اردیبهشت 1393, 13:48 عصر
ببینین ImageLocation رو هم برابر با null کنین نمیشه

ro3vayedel
دوشنبه 09 تیر 1393, 19:59 عصر
سلام دوستان
توی پروژه ای که نوشتم برای ثبت شخص عکسی را با استفاده از open file dialog از کاربر گرفتم و توی یک پوشه مشخص یک کپی از عکس بعنوان بکاپ با اسم منحصر بفرد مربوط به خود شخص (مثلا کد ملی) ایجاد کردم و اسم را به همراه پسوندش توی DB ثبت کردم..یعنی اینجوری شد که بجای ذخیره عکس در دیتابیس فقط نام +پسوندش توی دیتابیس ذخیره میشه (مثلا 1234569874.JPG )
از نظر نمایش عکس و غیره کاملا صحیح کار میکنه.
اما مشکل اینجاست که توی فرم ویرایش اگر عکس جدیدی را برای فردی که قبلا ثبت شده انتخاب کنی به دلیل اینکه اسم عکس جدید ایجاد شده با عکسی که قبلا در همون پوشه ذخیره شده همنام هستند.اجازه کار نمیده و میگه فایل درحال استفاده است.
توی کپی overwrite را true کردم باز همین اخطار رو میده.قبلش بهش گفتم اول delete کن بعد عکس را جایگذین کن.باز هم همون اخطار رو میده و نمیتونه فایل قبلی رو حذف کنه.
قبلش pictureBox رو خالی کردم image اون رو null کردم.اما همه اش میگه درحال استفاده است و نمیشه

واسه دکمه حذف عکس این کد رو نوشتم:

//pak kardane ax va namayeshe axe defult.
PicBoxMoshtari.Image = null;
Bitmap Ax = new Bitmap(Application.StartupPath + "\\data\\picMoshtari\\000.jpg");
PicBoxMoshtari.Image = Ax;
File.Delete(Application.StartupPath+"\\data\\PicMoshtari\\"+Convert.ToString(dataGridView1.SelectedRows[0].Cells[6].Value));
FMessegeBox.FarsiMessegeBox.Show("حذف عکس با موفقیت انجام شد", "حذف عکس مشتری");
ممنون میشم دوستان راهنمایی کنید؟

The process cannot access the file 'اسم فایل انتخاب شده' because it is being used by another process.

esalt2012
چهارشنبه 25 اسفند 1395, 20:22 عصر
با سلام
در حال نوشتن یه برنامه اعضای کتابخانه برای درس پروژم هستم که توی برنامه باید تصویر شخص به صورت شماره عضویت ذخیره بشه 1.jpg حالا مشکل اینجاست وقطی میخوای تصویر رو عوض کنی و عکس جدید رو بزاری و با همون شماره ذخیره کنی میگه تصویر در حال استفاده شدنه
The process cannot access the file because it is being used by another process

از کد های زیر هم استفاده کردم بازم نشد لطفا راهنمایی کنید
pictureBox1.Dispose();
pictureBox1.Image.Dispose();
pictureBox1.Image = null;

//--------------------------------------------------------------------//
Stream k = File.OpenRead(@"D:\\101.jpg");
Image image2 = Image.FromStream (k);
pictureBox1.Image = image2;
pictureBox1.Dispose();
image2.Dispose();
File.Delete(@"D:\\101.jpg");
//------------------------------------------------------------////

danialafshari
چهارشنبه 25 اسفند 1395, 20:34 عصر
با سلام
ابتدا برای تاپیک خود عنوان مناسب انتخاب کنید تا هم دوستان متوجه بشند و شما سریعتر به جواب برسید و هم اگه بعدها برا کسی همین سوال پیش اومد با سرچ بتونه استفاده کنه
حالا در خصوص مشکل برنامه شما باید بگم آیا برنامه رو به دیتابیس وصل کردید؟
مطمئنن اطلاعات باید ذخیره بشن و سعی کنید به جای عکس، مسیر عکس رو تو بانک قرار بدید و عکس رو هم در کنار برنامه بگذارید
سوال دیگه داشتید در خدمتم
موفق باشید

Mahmoud.Afrad
چهارشنبه 25 اسفند 1395, 20:41 عصر
به طور کلی بایست کاری کنید که فایل به صورت مداوم درگیر نشود. برای این هدف باید عکس را در حافظه اصلی لود کنید. چند راه به نظرم میرسه
یک اینکه: یک bitmap از عکس بسازید و در پیکچرباکس نمایش بدید.
دوم اینکه: یک استریم از عکس بسازید و از این استریم تصویر را نمایش داده و در انتها استریم را از بین ببرید.