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;
}