PDA

View Full Version : سوال: مشکل در کار با فایل؛ آیا این مشکل از خطای من است یا ویندوز؟ !



Parham.D
چهارشنبه 23 اردیبهشت 1388, 08:30 صبح
سلام به دوستان عزیز و اساتید گرامی.

با یک مشکل عجیب برخورد کردم (حداقل برای خودم). من یک برنامه ساد دارم که یک فایل DAT را میسازه، در آن نوشته و از آن میخواند. برنامه مشکلی ندارد و به خوبی کار میکند. مشکل این جاست که وقتی پنجره ویندوز باز است و فایل را نشان میدهد، برنامه من پیغام خطا میدهد که این فایل قبلا باز شده و یک process دیگر دارد از آن استفاده میکند!! توجه کنید که این فایل DAT باز نشده و فقط به صورت یک ICon در یک پنجره ویندوز نمایش داده شده. شما چی فکر میکنید؟ آیا این اشکال از من است یا ویندوز؛ یا هر دو؟؟؟!!! کدها رو مرور کردم مشکلی ندارند. فایل را باز میکنم؛ از آن میخوانم و بعد می‏بندم. اگر این پنجره ویندوز نباشد، برنامه خوب کار میکند.


با سپاس از کمک و راهنمایی شما . . .

Unknownlive
چهارشنبه 23 اردیبهشت 1388, 10:33 صبح
امکان داره مشکل از اینه که فایل بسته نمی شه شما بعد از کارتون باید از file.close استفاده کنید

Parham.D
پنج شنبه 24 اردیبهشت 1388, 09:01 صبح
با سپاس از توجه شما . . .
همانطور که در نوشته اول عرض کردم، کد من مشکلی نداره و چک شده، اگر آن پنجره نمایش فایل باز نباشه برنامه هیچ خطایی نمیده و خوب کار میکنه.....

mohsen_csharp
پنج شنبه 24 اردیبهشت 1388, 10:32 صبح
کدتون رو بگذارید تا ما هم امتحان کنیم

Parham.D
جمعه 25 اردیبهشت 1388, 08:05 صبح
کد:( البته از این کد در قسمتهای دیگه برنامه هم استفاده شده، که همگی تا حدود زیادی مثل هم هستند.)






private void btnDelete_Click(object sender, EventArgs e)
{
if (listView.Items.Count > 0 && listView.SelectedItems.Count > 0)
{
FileStream RemindersFile = new FileStream("Reminders.dat", FileMode.Open, FileAccess.Read);
FileStream TemporaryFile = new FileStream("Temp.dat", FileMode.CreateNew, FileAccess.Write);
BinaryFormatter FileReaderWriter = new BinaryFormatter();
Record Records = new Record();

bool TestEndOfFile = true;
ListView.SelectedListViewItemCollection SelectedItem = listView.SelectedItems;

while (TestEndOfFile)
{
try
{
Records = (Record)FileReaderWriter.Deserialize(RemindersFile );

if (Records.Note != SelectedItem[0].Text)
{
FileReaderWriter.Serialize(TemporaryFile, Records);
}
}
catch (SerializationException f)
{
string s = f.Message;
TestEndOfFile = false;
}
}

RemindersFile.Close();
TemporaryFile.Close();

File.Copy("Temp.dat", "Reminders.dat", true);
File.Delete(Application.StartupPath + "\\Temp.dat");

listView.Clear();
ShowReminders();
}
}



محل خطا خط 5 هست که فایل Reminders.dat را داره باز میکنه. در صورتی که پنچره ویندوز باز باشه و فایل به صورت آیکن در آن دیده شود خطا میدهد که این فایل قیلا باز شده. در حالی که فقط به صورت آیکن در حال نمایش است.

با سپاس از توجه شما . . .