我正在尝试确定文件当前是打开还是使用C#写入。我已经看到了类似的SO问题,所有这些问题都与我的代码类似,它在文件上尝试File.Open。但是当我使用下面的代码运行程序时,我也手动打开文件,我得到意外的结果"文件当前未被锁定"。任何想法/建议/我遗失的任何东西?
Team Explorer
答案 0 :(得分:9)
文本文件通常不被锁定 - 它们的信息通常被拉入并加载到内存中,所以除非你试图在另一个程序加载文件的同一时刻访问它(这会非常快)那么你不应该有任何问题。
来源 - Similar question
编辑:如果它是单词打开然后你会有问题,因为Word保持流打开。尝试在Word中打开文件(如果有的话)并再次运行代码,我相信它应该可行。否则,如果要查看它是否在记事本中打开,则必须扫描系统上运行的当前进程以获取记事本,并检查进程是否打开了该文件。
答案 1 :(得分:3)
许多文本编辑实际上并没有对文件进行文件锁定。例如,我使用Sublime Text 3编辑文件。我可以在Sublime中打开一个.txt文件,然后在另一个编辑器中打开SAME文件,例如记事本。 .txt文件中没有文件锁。
当您打开文件然后立即关闭时,编辑器会将文件加载到内存中。它们没有开放。编辑器只保持文件打开足够长的时间来加载它们,但是,在编辑器将文件加载到RAM中时,技术上会锁定文件。由于此操作非常快,所以它不会持续很长时间。
如果在致电filepath.Open();
之前IsFileLocked(filepath)
Main
,则可能导致文件锁定,并按预期查看文件锁定错误。如果您想测试一下,我建议您在static void Main(string[] args)
{
string path = @"C:\TEMP\testFile.txt";
FileInfo filepath = new FileInfo(path);
Console.WriteLine("Opening \"filepath\"");
filepath.Open();
FileInfo filepath2 = new FileInfo(path);
if (IsFileLocked(filepath2)) {
Console.WriteLine("File is currently locked");
}
else
{
Console.WriteLine("File is currently NOT locked");
}
Console.WriteLine("Closing \"filepath\"");
filepath.Close();
if (IsFileLocked(filepath2)) {
Console.WriteLine("File is currently locked");
}
else
{
Console.WriteLine("File is currently NOT locked");
}
}
方法中尝试使用此代码:
ControlCommand(.., .., .., "Uncheck", ..)
我希望这有助于澄清正在发生的事情。
如果这个答案结果不正确并且羞辱了我的家人,我发誓要落在我的剑上。