C# Как изменить FileAttributes с нормального на каталог
Мой друг дал мне поврежденную SD-карту, которая показывает папку "DCIM" в виде файла. Я написал консольную программу, чтобы показать мне FileInfo, и он возвращает "Нормальный". Теперь я попытался изменить 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;
}
Программа работает должным образом, когда я проверяю attr, прежде чем она будет назначена, она возвращает "Каталог". Но, в конце концов, FileAttributes по-прежнему "Нормальный".
Можно ли изменить FileAttributes таким образом? Есть ли другое решение для этого?
1 ответ
В соответствии с документацией для функции API SetFileAttributes, к которой обращаются File.SetAttributes
решает:
Файлы не могут быть преобразованы в каталоги.
Если вы хотите получить информацию с этого устройства, вам придется читать необработанные сектора с помощью низкоуровневого ввода-вывода устройства. Это возможно, но много работы.
Если вы серьезно относитесь к получению информации с этого устройства, не пытайтесь писать на него. Данные повреждены. Попытка изменить данные на этом устройстве, скорее всего, приведет к дальнейшему повреждению того, что там есть. Используйте низкоуровневый считыватель, чтобы прочитать двоичный образ того, что находится в файле на вашем жестком диске. Затем сделайте копию этого файла, и вы сможете покончить с собой.
Конечно, вы можете спросить себя, действительно ли данные на этом диске стоят той работы, которую вы собираетесь потратить, пытаясь восстановить их. Восстановление данных может быть очень утомительно.