我的一个朋友给了我一张损坏的SD卡,它将“DCIM”文件夹显示为文件。 我写了一个Console程序来向我展示FileInfo,它返回“Normal”。现在我尝试将FileAttributes从“Normal”更改为“Directory”,如示例所示: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;
}
程序按预期运行,当我在分配它之前检查它时返回“目录”。但最终,FileAttributes仍然是“正常”。
是否可以通过这种方式更改FileAttributes? 还有其他解决办法吗?
答案 0 :(得分:1)
根据SetFileAttributes API函数的文档,这是对File.SetAttributes
的调用解析的内容:
无法将文件转换为目录。
如果您想从该设备获取信息,您必须使用低级设备I / O读取原始扇区。这是可能的,但需要做很多工作。
如果您真的想从该设备获取信息,不会尝试写入。数据已损坏。试图修改该设备上的数据更有可能进一步破坏那里的数据。使用低级读取器读取硬盘驱动器上文件的二进制图像。然后制作该文件的副本,你就可以将自己敲出来了。
当然,您可能想问自己,该驱动器上的数据是否真的值得您尝试恢复它的工作。数据恢复可能令人沮丧乏味。