我正在移动一些文件,但注意到FileInfo.Exists并不真正有效。在下面的示例中,在将文件从"foo“移动到"bar”之后,两个FileInfo对象似乎都是Exist。在其他运行中,我看到这两种情况都是错误的。
using System.IO;//File, FileInfo
public static void TestMoveTo()
{
// create file 1
string FileName = @"d:\temp\foo.txt";
File.WriteAllText(FileName, "Test file\n");
FileInfo FI_Test = new FileInfo(FileName);
// move to file 2
string NewFileName = @"d:\temp\bar.txt";
if (File.Exists(NewFileName))
File.Delete(NewFileName);
FileInfo FI_New = new FileInfo(NewFileName);
FI_Test.MoveTo(FI_New.FullName);
// test
bool OldExists = FI_Test.Exists;
bool NewExists = FI_New.Exists;
// use File.Exists
bool OldExists2 = File.Exists(FileName);
bool NewExists2 = File.Exists(NewFileName);
return;//debug breakpoint
}是否有一种方法来flush文件系统,或update FileInfo对象?
使用File.Exists方法工作正常,难怪,因为它在移动后探测文件系统。
这是否意味着在对文件系统进行更改之后,相关的FileInfo对象就完全无效?
发布于 2017-11-08 17:50:57
FileInfo.Exists是一个实例属性;它是在您的FileInfo被安装时创建的;也就是说,当您调用FileInfo FI_New = new FileInfo(NewFileName)时。如果NewFileName不存在,并且您稍后创建它,则FI.Exists不会更改。想想看,如果你打电话:
var noSuchFile = @"c:\this file does not exist";
File.Delete(noSuchFile); // just to be sure...
var fileExists = File.Exists();
var fi = new FileInfo(noSuchFile);
File.Create(noSuchFile);您认为fileExists会在代码的末尾从False更改为True吗?你认为fi.Exists会改变吗?他们不会。
FileInfo.Refresh()是一个更新实例属性(包括Exists )的方法。或者你可以再打电话给new FileInfo()。
https://stackoverflow.com/questions/47186245
复制相似问题