PDA

View Full Version : جلوگیری از باز شدن مجدد فایل



aradrobo
شنبه 24 تیر 1391, 00:44 صبح
سلام . من یک برنامه نوشتم که 10 تا رادیو باتن داره . وقتی روی رادیو باتن اولی تیک بزنم و روی باتن باز کردن کلیک کنم ، فایل تکست متنی (.txt) رو از هارد باز میکنه و اطلاعاتش رو در فرم برنامه نمایش می ده .
می خواهم وقتی یک بار این کار رو انجام داد ، وقتی خواستیم دوباره همین فایل تکس رو باز کنیم ، پیغام بدهد که این فایل قبلاً باز شده است ، آیا می خواهید دوباره باز کنید ؟ ( Yes / NO)

the king
شنبه 24 تیر 1391, 01:49 صبح
سلام . من یک برنامه نوشتم که 10 تا رادیو باتن داره . وقتی روی رادیو باتن اولی تیک بزنم و روی باتن باز کردن کلیک کنم ، فایل تکست متنی (.txt) رو از هارد باز میکنه و اطلاعاتش رو در فرم برنامه نمایش می ده .
می خواهم وقتی یک بار این کار رو انجام داد ، وقتی خواستیم دوباره همین فایل تکس رو باز کنیم ، پیغام بدهد که این فایل قبلاً باز شده است ، آیا می خواهید دوباره باز کنید ؟ ( Yes / NO)

وقتی روی دکمه کلیک کردید مشخصه Tag اون RadioButton ای که Checked اش true است رو چک کنید، اگر مقداری مثل "Loaded" داخلش بود
یک پیغامی نمایش دهید که اگر پاسخ DialogResult.Yes نبود از روتین خارج شوید (return کنید).
در غیر اینصورت فایل رو فراخوانی کرده و نشان دهید، و مشخصه Tag را به مقداری مثل "Loaded" تغییر بدهید.

یا بجای اینکار یک List از نوع string به ابتدای کلاس اضافه کنید که لیست مسیر فایل هایی که باز کرده اید رو نشون بده. هربار که خواستید
فایلی رو باز کنید اول چک کنید در این لیست هست یا نه. اگر بود پیغام نشان دهید و اگر نبود به لیست اضافه اش کنید.

aradrobo
شنبه 24 تیر 1391, 03:18 صبح
ممنون می شوم بیشتر راهنمایی کنید

the king
یک شنبه 25 تیر 1391, 01:02 صبح
ممنون می شوم بیشتر راهنمایی کنید

به مثال پیوستی مراجعه شود.

barnamenevisjavan
یک شنبه 25 تیر 1391, 08:22 صبح
خيلي راحته دوباره متن اون فايل رو بخون و ببين با متني كه توي تكس باكس هست متابقت داره يا نه اگر برابر بود پيغام بده اين فايل باز شده

aradrobo
دوشنبه 26 تیر 1391, 20:13 عصر
به مثال پیوستی مراجعه شود.

در این برنامه ای که به من دادید فقط هر رادیو یک فایل رو باز می کند . برنامه من این
گونه نیست . واسه من اینجوریه که یک نامبریک دارم که بهش عدد می دم . فایلی که اون عددش باشه باز میشه . براش فرقی نداره کدوم رادیو باتن انتخاب کنیم . فقط باید بفهمه که این فایل قبلاً در فلان رادیو باز شده بود

aradrobo
دوشنبه 26 تیر 1391, 20:15 عصر
خيلي راحته دوباره متن اون فايل رو بخون و ببين با متني كه توي تكس باكس هست متابقت داره يا نه اگر برابر بود پيغام بده اين فايل باز شده
همان طور که گفتم من 10 تا رادیو دارم . و متن ها متناسب با رادیو ها باز خوانی مشوند

the king
دوشنبه 26 تیر 1391, 21:14 عصر
در این برنامه ای که به من دادید فقط هر رادیو یک فایل رو باز می کند . برنامه من این
گونه نیست . واسه من اینجوریه که یک نامبریک دارم که بهش عدد می دم . فایلی که اون عددش باشه باز میشه . براش فرقی نداره کدوم رادیو باتن انتخاب کنیم . فقط باید بفهمه که این فایل قبلاً در فلان رادیو باز شده بود

شما اصلا اینکه RadioButton ها هستند و نیستند و چه کاری انجام می دهند و نمی دهند رو بگذارید کنار، ربطی به الگوریتم تشخیص فایل تکراری
نداره، به هر طریقی که خواستید بالاخره مشخص شده که کدوم فایل قراره باز بشه، با شماره یا بی شماره.
قبل از اینکه فایل باز بشه مسیر اش داخل اون لیست files چک میشه که اگه بود، یعنی قبلا باز شده :

string filePath = "مسیر مورد نظر شما";
if (files.Contains(filePath))
{
if (MessageBox.Show("Do you want to reopen this file?"
, "Reopen", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
{
return;
}
}
else
{
files.Add(filePath);
}
textBox2.Text = File.ReadAllText(filePath);

tooraj_azizi_1035
دوشنبه 26 تیر 1391, 21:25 عصر
سلام
تشخیص باز بودن فایل:

protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;

try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}

//file is not locked
return false;
}



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

aradrobo
شنبه 31 تیر 1391, 11:32 صبح
سلام
تشخیص باز بودن فایل:

protected virtual bool IsFileLocked(FileInfo file)
{
FileStream stream = null;

try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}

//file is not locked
return false;
}



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

نه این هم نشد