2013-05-27 4 views
2

У меня есть текстовый файл, и я хочу проверить, открыто ли это. проблема заключается в том, что можно открыть файл несколько раз, и нет исключения.Как проверить, используется ли текстовый файл?

Я пробовал:

stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None); 

исключением.

Я также попытался

using (Stream stream = new FileStream("MyFilename.txt", FileMode.Open)) 

не исключение.

И даже

System.Diagnostics.Process.GetProcessesByName("MyFilename.txt").Length < 1 

но даже если файл открыт, он returns 0.

MyFilename.txt - это просто имя, в реальном коде это реальный путь к файлу.

Что я могу написать insted?

Спасибо! Грейс

ответ

2

Если блокнот не блокирует только текстовый файл, то вам нужно использовать другой подход

Process[] pList = Process.GetProcessesByName("notepad"); 
foreach(Process p in pList) 
{ 
    if(p.MainWindowTitle.Contains("MyFilename.txt") 
     ...... 
} 

Конечно, это не является безумным решением. Я мог бы открыть файл с помощью WordPad или какого-либо другого текстового редактора, и если он не заблокирован, у нас снова будет та же проблема.

Однако, если вы успешно открыли файл, это проблема с записью, чтобы сохранить изменения

+0

Thats what I need! Благодаря!! Вы решили мою проблему. – user2348001

+0

Знаете ли вы другие типы, которые не будут блокироваться, например блокнот? – user2348001

+0

Простите, нет, это пробная версия и посмотрите здесь – Steve

1

Да есть способ, используя FileStream как

protected virtual bool IsFileUsed(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 in use 
    return false; 
} 
+0

Как я уже сказал, я попробовал это. не исключение. – user2348001

+0

проверить эту ссылку http://www.pinvoke.net/default.aspx/kernel32.OpenFile – Rahul

+0

@Rahul: при копировании вставьте код, не забудьте установить ссылку на исходное сообщение. Много полезной информации там - http://stackoverflow.com/questions/876473/is-there-a-way-to-check-if-a-file-is-in-use –

Смежные вопросы