PDA

View Full Version : پاک کردن فایل



amindiary
یک شنبه 28 مرداد 1386, 17:09 عصر
میخوام یک فایل مشخص رو پاک کنم! از system.io.file.delete استفاده می کنم اما ایراد میگیره که فایل شما در یک process دیگه داره استفاده میشه!!! چطوری می تونم اون process رو از کار بندازم تا بتونه فایل رو پاک کنه؟:متفکر:

behzadk
دوشنبه 29 مرداد 1386, 00:12 صبح
از taskmanger از tab و process و ببین به نظرت کدام process غیرعادی است endprocess کن

mehdi.mousavi
سه شنبه 30 مرداد 1386, 16:00 عصر
میخوام یک فایل مشخص رو پاک کنم! از system.io.file.delete استفاده می کنم اما ایراد میگیره که فایل شما در یک process دیگه داره استفاده میشه!!! چطوری می تونم اون process رو از کار بندازم تا بتونه فایل رو پاک کنه؟:متفکر:


سلام.
بقول Paul DiLascia، یکی از نویسندگان محبوب من، باید از بازوکای TerminateProcess استفاده کنید. در Win32 API ها، تابعی بنام TerminateProcess وجود داره که یک Process رو بهمراه کلیه Thread های اون خاتمه میده! البته خطرات احتمالی Unload نشدن DLL های Attach شده به کد و ... وجود داره. (کاری که End Process انجام میده). پس به این مساله توجه کنید.



[DllImport("kernel32.dll", SetLastError=true)]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool TerminateProcess(IntPtr hProcess, uint uExitCode);

mohammad272005
پنج شنبه 01 شهریور 1386, 19:52 عصر
قول Paul DiLascia، یکی از نویسندگان محبوب من، باید از بازوکای TerminateProcess استفاده کنید.
Process.Kill هم در backgroung همین کار رو می‏کنه:

/// <summary>Immediately stops the associated process.</summary>
/// <exception cref="T:System.ComponentModel.Win32Exception">The associated process could not be terminated. -or-The process is terminating.-or- The associated process is a Win16 executable.</exception>
/// <exception cref="T:System.SystemException">No process <see cref="P:System.Diagnostics.Process.Id"></see> has been set, and a <see cref="P:System.Diagnostics.Process.Handle"></see> from which the <see cref="P:System.Diagnostics.Process.Id"></see> property can be determined does not exist.-or- There is no process associated with this <see cref="T:System.Diagnostics.Process"></see> object.-or- You are attempting to call <see cref="M:System.Diagnostics.Process.Kill"></see> for a process that is running on a remote computer. The method is available only for processes running on the local computer. </exception>
/// <exception cref="T:System.InvalidOperationException">The process has already exited. </exception>
/// <filterpriority>1</filterpriority>
public void (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://mscorlib:2.0.0.0:b77a5c561934e089/System.Void) Kill (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/System.Diagnostics.Process/Kill())()
{
SafeProcessHandle (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/Microsoft.Win32.SafeHandles.SafeProcessHandle) processHandle = null;
try
{
processHandle = this.GetProcessHandle (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/System.Diagnostics.Process/GetProcessHandle(Int32):Microsoft.Win32.SafeHandle s.SafeProcessHandle)(1);
if (!NativeMethods (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/Microsoft.Win32.NativeMethods).TerminateProcess (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/Microsoft.Win32.NativeMethods/TerminateProcess(Microsoft.Win32.SafeHandles.SafeP rocessHandle,Int32):Boolean)(processHandle, -1))
{
throw new Win32Exception (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/System.ComponentModel.Win32Exception/.ctor())();
}
}
finally
{
this.ReleaseProcessHandle (http://www.aisto.com/roeder/dotnet/Default.aspx?Target=code://System:2.0.0.0:b77a5c561934e089/System.Diagnostics.Process/ReleaseProcessHandle(Microsoft.Win32.SafeHandles.S afeProcessHandle))(processHandle);
}
}

amindiary
یک شنبه 04 شهریور 1386, 10:45 صبح
فکر کنم اگه مشکلم رو واضحتر بیان کنم جواب بهتری بگیرم!

یک pictureBox دارم که یک تصویر رو از طریق Paint نمایش میدیم. مسیر فایل c:\image\pic1.jpg حالا میخوام در همین حال توی همون مسیر با همون اسم عکسی دیگر رو جایگذاری کنم!!! باید چطوری این عکس فعلی رو بندازم بیرون!!؟!؟!؟؟ :ناراحت:

ghafoori
یک شنبه 04 شهریور 1386, 11:41 صبح
دوست عزیز شما عکس را باز کردید و ایا فایل ان را بستید من فکر می کنم این خطا بخاطر این است که شما فایلی را که باز کردید و رسم کردید نبستید برای همین خطا را میدهد و فکر می کنم اگر از راههای دوستان استفاده کنید برنامه خودتان را ببندید

PC2st
یک شنبه 04 شهریور 1386, 18:44 عصر
باید چطوری این عکس فعلی رو بندازم بیرون!!؟!؟!؟؟
اگر با متد Image.FromFile عکس رو در PictureBox لود کردی، برای اینکه بتونی پاکش کنی، قبلش باید اینکار رو انجام بدی:


pictureBox1.Image.Dispose();

//delete your file here...

pictureBox1.Image = null;

amindiary
دوشنبه 05 شهریور 1386, 14:49 عصر
نشد! dispose کردم بازم میگه این فایل داره از جای دیگه استفاده میشه!!!!!!:گریه::عصبانی++:

hdv212
دوشنبه 05 شهریور 1386, 15:29 عصر
نشد! dispose کردم بازم میگه این فایل داره از جای دیگه استفاده میشه!!!!!!
من به شیوه ی زیر امتحان کردم و شد، در رویداد load فرمم، خاصیت image مربوط به pictureBox رو با آدرس یه عکس، ست کردم :

private void Form1_Load(object sender, EventArgs e)
{
this.pictureBox1.Image = Image.FromFile("c:\\image\\pic1.gif");
}
بعد در رویداد کلیک یه دکمه، کد زیر رو برای کپی کردن یه عکس با همون نام، در مسیری که عکسش داره در pictureBox نشون داده میشه نوشتم و خاصیت image pictureBox رو یه بار دیگه ست کردم :

private void button1_Click(object sender, EventArgs e)
{
this.pictureBox1.Image.Dispose();
System.IO.File.Copy("pic1.gif", "c:\\image\\pic1.gif",true);
this.pictureBox1.Image = Image.FromFile("c:\\image\\pic1.gif");
}

اگه باز مشکلتون حل نشد، پس عکس مورد نظر در جای دیگه به غیر از برنامه ی خودت مورد استفاده قرار گرفته!

PC2st
دوشنبه 05 شهریور 1386, 18:12 عصر
نشد! dispose کردم بازم میگه این فایل داره از جای دیگه استفاده میشه!!!!!!
باید به شکل زیر حذف میکردید:


pictureBox1.Image.Dispose();

System.IO.File.Delete("mypicture.jpg");

pictureBox1.Image = null;