PDA

View Full Version : برسی باز بودن فایل مشخص



kingtak
پنج شنبه 03 اسفند 1391, 16:14 عصر
سلام
چطور میتونم برسی کنم که اگه فلان فایل باز بود(مثلا یک pdf مشخص) یه پیغام بده وگرنه فایل رو باز کنه؟

aryadad
پنج شنبه 03 اسفند 1391, 16:31 عصر
static bool FileInUse(string path)
{
try
{
using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
{
fs.CanWrite
}
return false;
}
catch (IOException ex)
{
return true;
}
}

string filePath = "C:\\Documents And Settings\\yourfilename";
bool isFileInUse;

isFileInUse = FileInUse(filePath);

// Then you can do some checking
if (isFileInUse)
Console.WriteLine("File is in use");
else
Console.WriteLine("File is not in use");

kingtak
پنج شنبه 03 اسفند 1391, 20:22 عصر
fs.CanWrite خطا میگیره


Only assignment, call, increment, decrement, and new object expressions can be used as a statement

the king
پنج شنبه 03 اسفند 1391, 22:07 عصر
سلام
چطور میتونم برسی کنم که اگه فلان فایل باز بود(مثلا یک pdf مشخص) یه پیغام بده وگرنه فایل رو باز کنه؟

اگه بخواهیم روی Writable بودن اش حساب کنیم فایل های Read Only و فایل های روی CD / DVD رو باز تشخیص خواهیم داد.
روی این مساله متمرکز شویم که وقتی یک فایلی بازه، نمیشه بصورت اختصاصی (بدون هیچگونه دسترسی Shared) بازش کرد.

using System.IO;
using System.Diagnostics;



private bool TryOpen(string path)
{
try
{
using (FileStream f = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None))
{
}
ProcessStartInfo info = new ProcessStartInfo(path);
info.Verb = "Open";
info.WindowStyle = ProcessWindowStyle.Maximized;
Process.Start(info);
return true;
}
catch { }
return false;
}


مثلا :

TryOpen(@"C:\Downloads\book.pdf");


یا مثلا :

string path = @"C:\Downloads\book.pdf";
bool result = TryOpen(path);
if ((result == false) && (File.Exists(path)))
{
MessageBox.Show("This file is already open!");
}