C# 如何将文件属性从“普通”更改为“目录”

本文关键字:目录 普通 文件属性 | 更新日期: 2023-09-27 18:31:53

我的一个朋友给了我一张损坏的SD卡,其中将"DCIM"文件夹显示为文件。我写了一个控制台程序来向我显示FileInfo,它返回"正常"。现在我尝试将文件属性从"普通"更改为"目录",如示例中所示: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 时,它会返回"目录"。但最终,文件属性仍然是"正常的"。

是否可以以这种方式更改文件属性?有没有其他解决方案可以做到这一点?

C# 如何将文件属性从“普通”更改为“目录”

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

文件无法转换为目录。

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

如果您真的想从该设备获取信息,请不要尝试写入它。数据已损坏。尝试修改该设备上的数据更有可能进一步破坏那里的数据。使用低级读取器将硬盘上文件的二进制映像读取。然后制作该文件的副本,您可以在副本上淘汰自己。

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