我有一个文本文件,我想检查它是否已经打开。 问题是多次打开文件是可行的,没有例外。
我试过了:
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
只是一个名称,在真实代码中它是真正的文件路径。
我可以写什么?
谢谢! 格雷斯
答案 0 :(得分:2)
如果记事本没有专门锁定文本文件,那么您需要使用不同的方法
Process[] pList = Process.GetProcessesByName("notepad");
foreach(Process p in pList)
{
if(p.MainWindowTitle.Contains("MyFilename.txt")
......
}
当然,这不是一个愚蠢的解决方案。我可以用写字板或其他文本编辑器打开文件,如果没有锁,我们又有同样的问题
但是,如果您成功完全打开该文件,那么保存其更改是一个记事本问题
答案 1 :(得分: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;
}