Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不存在的文件的FileAttributes值为-1?_C#_Fileinfo_System.io.fileinfo - Fatal编程技术网

C# 为什么不存在的文件的FileAttributes值为-1?

C# 为什么不存在的文件的FileAttributes值为-1?,c#,fileinfo,system.io.fileinfo,C#,Fileinfo,System.io.fileinfo,考虑下面的代码- FileInfo fileInfo = new FileInfo("C:\\doesNotExist.txt"); Console.WriteLine(fileInfo.Attributes); Console.WriteLine(fileInfo.Attributes.HasFlag(FileAttributes.ReadOnly)); 根据,枚举的默认基础类型是int,值为-1的int基本上都是二进制的1s。既然FileAttributes允许按位组合其成员值(),

考虑下面的代码-

 FileInfo fileInfo = new FileInfo("C:\\doesNotExist.txt");
 Console.WriteLine(fileInfo.Attributes);
 Console.WriteLine(fileInfo.Attributes.HasFlag(FileAttributes.ReadOnly));

根据,枚举的默认基础类型是int,值为-1的int基本上都是二进制的1s。既然FileAttributes允许按位组合其成员值(),为什么FileAttributes的默认值是-1,因为这意味着一个不存在的文件拥有所有可能的FileAttributes(上面的代码在第三行打印为True)

这只是猜测,源代码令人困惑,但看起来可能是这样,代码可以区分未初始化的数据(即int默认为零)和已初始化但没有值的数据(如不存在的文件上的文件属性)之间的差异

如果找不到该文件:

if (!returnErrorOnNotFound) {
    // Return default value for backward compbatibility
    dataInitialised = 0;
    data.fileAttributes = -1;
}

在访问属性之前,期望调用方检查FileInfo的
属性是否存在似乎是合理的。

向后兼容性。改为使用File.GetAttributes(),它会抛出。
if (!returnErrorOnNotFound) {
    // Return default value for backward compbatibility
    dataInitialised = 0;
    data.fileAttributes = -1;
}