1

私の友人が、「DCIM」フォルダをファイルとして表示する破損した SD カードをくれました。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;
    }

プログラムは期待どおりに実行されます。割り当てられる前に attr をチェックすると、「ディレクトリ」が返されます。しかし、結局のところ、FileAttributes はまだ「通常」です。

この方法で FileAttributes を変更することは可能ですか? これを行う別の解決策はありますか?

4

1 に答える 1

1

SetFileAttributes API 関数のドキュメントによると、これは次のように呼び出しがFile.SetAttributes解決されます。

ファイルをディレクトリに変換することはできません。

そのデバイスから情報を取得したい場合は、低レベルのデバイス I/O を使用して未加工のセクターを読み取る必要があります。可能ですが、手間がかかります。

そのデバイスから情報を取得することに真剣に取り組んでいる場合は、書き込みを試みないでください。データが壊れています。そのデバイス上のデータを変更しようとすると、そこにあるデータがさらに破損する可能性が高くなります。低レベルのリーダーを使用して、ハード ドライブ上のファイルにあるもののバイナリ イメージを読み取ります。次に、そのファイルのコピーを作成すると、そのコピーで自分をノックアウトできます。

もちろん、そのドライブのデータが、回復しようとする作業に見合うだけの価値があるかどうかを自問することもできます。データの回復はイライラするほど面倒です。

于 2014-11-25T22:11:49.950 に答える