首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileInfo.MoveTo不更新FileInfo.Exists

FileInfo.MoveTo不更新FileInfo.Exists
EN

Stack Overflow用户
提问于 2017-11-08 17:39:28
回答 1查看 947关注 0票数 2

我正在移动一些文件,但注意到FileInfo.Exists并不真正有效。在下面的示例中,在将文件从"foo“移动到"bar”之后,两个FileInfo对象似乎都是Exist。在其他运行中,我看到这两种情况都是错误的。

代码语言:javascript
复制
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对象就完全无效?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-08 17:50:57

FileInfo.Exists是一个实例属性;它是在您的FileInfo被安装时创建的;也就是说,当您调用FileInfo FI_New = new FileInfo(NewFileName)时。如果NewFileName不存在,并且您稍后创建它,则FI.Exists不会更改。想想看,如果你打电话:

代码语言:javascript
复制
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()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47186245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档