【C#】FileInfo.Exists与File.Exists的区别



    FileInfo.Exists与File.Exists看似很像,实际上有一些差别

    先看用法

    string path = @"C:\myfile.txt";
    FileInfo fileInfo = new FileInfo(path);
    Console.WriteLine(fileInfo.Exists);
    Console.WriteLine(File.Exists(path));

    再说差别



    • FileInfo.Exists,会在FileInfo对象第一次调用Exists方法时会缓存结果,更新缓存需要调用Refresh方法
    • File.Exists,每次都会查看文件系统返回文件是否存在的状态,不会缓存结果

    根据MSDN关于FileInfo.Exists的说明

    Exists property returns false if any error occurs while trying to determine if the specified file exists. This can occur in situations that raise exceptions such as passing a file name with invalid characters or too many characters, a failing or missing disk, or if the caller does not have permission to read the file.

    Exists属性在确定文件是否存在时出错会返回false,比如文件名中含有非法字符、文件名过长、硬盘缺失、缺少文件读取权限等。

    但实际测试下来并不是这样,只要文件存在,不管是本地文件、还是网络文件,抑或是符号链接映射的文件,也不管文件是否具有权限读写,只要文件存在,FileInfo.Exists和File.Exists都会返回True。

    而用StreamReader打开时,文件有权限时一切正常;文件没有权限是,如是网络文件会出现“Could not find file '...'”的FileNotFoundException错误,如是本地文件会出现“Access to the path '...' is denied.”的UnauthorizedAccessException错误。

    参考:

    1. FileInfo.Exists vs File.Exsists
    2. FileInfo::Exists Property
    3. How to use File.Exists and Handle Insufficient Permissions
    4. FileInfo.Exists returns false eventhough file exists


    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自枫芸志,原文地址《【C#】FileInfo.Exists与File.Exists的区别
    标签:
    分享:

还没有人抢沙发呢~

无觅相关文章插件,快速提升流量