C#如何将FileAttributes从Normal更改为Directory

时间:2014-11-25 22:03:47

标签: c# file-attributes

我的一个朋友给了我一张损坏的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? 还有其他解决办法吗?

1 个答案:

答案 0 :(得分:1)

根据SetFileAttributes API函数的文档,这是对File.SetAttributes的调用解析的内容:

  

无法将文件转换为目录。

如果您想从该设备获取信息,您必须使用低级设备I / O读取原始扇区。这是可能的,但需要做很多工作。

如果您真的想从该设备获取信息,不会尝试写入。数据已损坏。试图修改该设备上的数据更有可能进一步破坏那里的数据。使用低级读取器读取硬盘驱动器上文件的二进制图像。然后制作该文件的副本,你就可以将自己敲出来了。

当然,您可能想问自己,该驱动器上的数据是否真的值得您尝试恢复它的工作。数据恢复可能令人沮丧乏味。