PDA

View Full Version : مشکل در Delete کردن فایل



mokamel
یک شنبه 19 بهمن 1393, 19:49 عصر
سلام
دوستان من یه تیکه کد دارم به شکل زیر که خط آخر که میخوام فایل و delete کنم همش ایراد مییگیره . چرا ؟

private void button1_Click(object sender, EventArgs e)
{
txtpath.Text = null;
txtisbn.Text = null;
txtpdf.Text = null;
OpenFileDialog opf = new OpenFileDialog();
DialogResult result = opf.ShowDialog();
opf.Filter = "pdf file (*.pdf)|*.Pdf";
try
{
txtpath.Text = opf.FileName;
txtpdf.Text = ExtractTextFromPdf(txtpath.Text);
string f = txtpdf.Text;
string sPattern = "\\d{3}-\\d{1}-\\d{3}-\\d{5}-\\d{1}";
var s = Regex.Match(f, sPattern, RegexOptions.IgnoreCase);
txtisbn.Text = s.ToString();
//txtpdf.SelectionStart = txtpdf.Find("isbn"+txtisbn.Text);
//txtpdf.SelectionColor = Color.Red;
//txtpdf.SelectionBackColor = Color.Yellow;
}
catch
{
if (result == DialogResult.OK)
{
txtisbn.Text = "کد انتشار یافت نشد";
}
}
if (result == DialogResult.OK)
{
string fileName = opf.FileName;
string path = Path.GetDirectoryName(fileName);
string pp = txtisbn.Text + ".pdf";
File.Copy(fileName, Path.Combine(path, pp), true);
opf.Disposed();
File.Delete(fileName);
}
}

قسمت try cach یه کاری رو فایل می کنم که pdf و گرفتم تبدیل به text کردم
گیرم رو خط File.Delete هستش که همش میگه
An unhandled exception of type 'System.IO.IOException' occurred in mscorlib.dll

Additional information: The process cannot access the file 'C:\Users\Admin\Downloads\re\45646.pdf' because it is being used by another process.

بیتا حکمت
یک شنبه 19 بهمن 1393, 20:01 عصر
این خطا میگه که PDF توسط برنامه دیگری در حال استفاده است ، یا اینکه میخواین یک PDF رو که باز هست حذف کنید

Saman_12
یک شنبه 19 بهمن 1393, 20:41 عصر
احتمالا در تابع ExtractTextFromPDF فایل رو باز میکنید ولی آزادش نمیکنید اگر این تابع از پروسس دیگه ای استفاده میکنه باید اون پروسس بسته شه (فکر کنم میشه بدون بستن هم فایل رو آزاد کرد) یا اگر پروسه شما اون رو باز کرده خودتون ببندید یا دسترسی رو تغییر بدین.

mokamel
سه شنبه 21 بهمن 1393, 12:45 عصر
خیلی محبت کردین ، اما این مطلب که فرمودید برگردان فارسی همون پیغام هستش ، راه کار شما چیه ؟
اینم همون تیکه کد فرخوان PDF هستش ، که تو خط 17 فرخوانش می کنم

public static string ExtractTextFromPdf(string path)
{
PdfReader reader = new PdfReader(path);
StringBuilder text = new StringBuilder();

for (int i = 1; i <= reader.NumberOfPages; i++)
{
text.Append(PdfTextExtractor.GetTextFromPage(reade r, i));
}

return text.ToString();

}

mokamel
سه شنبه 21 بهمن 1393, 13:14 عصر
مشکل و پیدا کردم و حل شد : گفتم بگم اینجا که شاید به کار دوستان بیاید .
نکته در استفاده از دستور Using هستش ، خودش اتوماتیک Dispose میکنه تابع رو .
یعنی در هنگام تعریف متدم که برای extrac کردن PDF نوشته بودم ، از دستور زیر اسفتاده کردم :

public static string ExtractTextFromPdf(string path)
{
using (PdfReader reader = new PdfReader(path))
{
StringBuilder text = new StringBuilder();

for (int i = 1; i <= reader.NumberOfPages; i++)
{
text.Append(PdfTextExtractor.GetTextFromPage(reade r, i));
}
return text.ToString();
}
}

Saman_12
چهارشنبه 22 بهمن 1393, 00:06 صبح
شما که کد نزاشته بودین از کجا باید فهمید چیکار کردید که بشه راهنمایی کرد.
توی این مورد شما متد Close یا Dispose رو باید بعد از اتمام کار صدا میکردین که نکردید (using خودش این کار رو میکنه.)