【发布时间】:2014-11-25 22:03:46
【问题描述】:
我的一个朋友给了我一张损坏的 SD 卡,其中将“DCIM”文件夹显示为文件。 我编写了一个控制台程序来显示 FileInfo,它返回“正常”。现在我尝试将 FileAttributes 从“正常”更改为“目录”,如示例中所示:http://msdn.microsoft.com/de-de/library/system.io.file.setattributes%28v=vs.110%29.aspx
static void Main(string[] args)
{
var path = "O://DCIM";
FileAttributes attributes = File.GetAttributes(path);
attributes = RemoveAttribute(attributes, FileAttributes.Normal);
var attr = attributes | FileAttributes.Directory;
File.SetAttributes(path, attr);
var fi = new FileInfo(path);
Console.WriteLine(fi.Name + " -- " + fi.Attributes);
Console.ReadKey();
}
private static FileAttributes RemoveAttribute(FileAttributes attributes, FileAttributes attributesToRemove)
{
return attributes & ~attributesToRemove;
}
程序按预期运行,当我在分配它之前检查 attr 时,它返回“目录”。但最后,FileAttributes 仍然是“Normal”。
是否可以通过这种方式更改 FileAttributes? 有另一种解决方案吗?
【问题讨论】:
-
实用部分——“如何从损坏的磁盘中恢复文件”在superuser.com/tour 上可能没问题;关于在磁盘上读取/写入原始数据的讨论对于 SO 来说可能过于广泛,但已经有很多问题了。其余部分由 Jim Mischel 回答为“否”。
-
我很奇怪
File.SetAttributes没有抛出异常。查看参考源,它显示File.SetAttributes调用SetFileAttributes,如果SetFileAttributes返回0,则抛出异常。显然SetFileAttributes在尝试将文件转换为目录时不会因错误退出。好奇。 -
是的,如果有错误我不会问。但一切似乎都很好,只是没有。
标签: c# file-attributes