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 时,它会返回"目录"。但最终,文件属性仍然是"正常的"。
是否可以以这种方式更改文件属性?有没有其他解决方案可以做到这一点?
根据 SetFileAttributes API 函数的文档,这是对File.SetAttributes
的调用解析为:
文件无法转换为目录。
如果要从该设备获取信息,则必须使用低级别设备 I/O 读取原始扇区。这是可能的,但需要做很多工作。
如果您真的想从该设备获取信息,请不要尝试写入它。数据已损坏。尝试修改该设备上的数据更有可能进一步破坏那里的数据。使用低级读取器将硬盘上文件的二进制映像读取。然后制作该文件的副本,您可以在副本上淘汰自己。
当然,您可能想问问自己,该驱动器上的数据是否真的值得您尝试恢复它。数据恢复可能令人沮丧地乏味。