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は単なる名前であり、実際のコードでは実際のファイル パスです。

代わりに何を書けばよいですか?

ありがとう!グレース

4

2 に答える 2

2

メモ帳がテキスト ファイルを排他的にロックしない場合は、別のアプローチを使用する必要があります。

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

もちろん、これは簡単な解決策ではありません。ワードパッドまたはその他のテキスト エディタでファイルを開くことができますが、ロックがない場合は、同じ問題が再び発生します。

ただし、ファイルを排他的に開くことに成功した場合、その変更を保存するのはメモ帳の問題です

于 2013-05-27T10:49:26.300 に答える
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;
}
于 2013-05-27T10:39:18.107 に答える