0

読み取り専用ファイルのようですね。そうではありません。

したがって、私の目標は、作成したアプリケーションからすべてのファイルを .zip ファイルに圧縮するだけでバックアップを作成することです。まず、すべてのファイルを収集して別のフォルダーに配置します (たとえば、.exe ファイルをバックアップする必要はありません)。次に、それらを使用して圧縮しますIO.compression.ZipFile

ZipFile.CreateFromDirectory(backupDirectory, ZipDirectory);

後で、ユーザーがバックアップを復元したい場合は、まず既存のファイルとディレクトリを削除してから抽出します。

ZipFile.ExtractToDirectory(openFileDialog1.FileName, installDirectory);

問題: ファイルが読み取り専用になり、1 つのファイルが .mdf ファイルになり、テーブルを変更できなくなり、アプリが役に立たなくなります。私はこれをやってみました:

public void Recurse(DirectoryInfo directory)
    {
        foreach (FileInfo fi in directory.GetFiles())
        {
            //fi.Attributes |= FileAttributes.ReadOnly; //this didn't work eather
            fi.IsReadOnly = false;
        }

        foreach (DirectoryInfo subdir in directory.GetDirectories())
        {
            Recurse(subdir);
        }
    }

この質問から。 うまくいきませんでした。「読み取り専用」フラグが .mdf プロパティでチェックされていないため、機能するとは思いません。また、[セキュリティ] タブを調べると、次のようになります。

SYSTEM、Admin、および User は同じです。不足しているのは、すべてのチェックが許可に設定されたグループ名「Everyone」です。このグループを手動で再度設定した後、いくつかの改善が見られますが、ログインできない、ユーザー [現在のユーザー] のログインに失敗したなどの他のエラーが引き続き発生します

編集:上記のセキュリティタブの問題は、そのRecurse方法を使用したためです。事態を悪化させた。したがって、file.IsReadOnly = falseすべてのファイルに を使用するのは適切な解決策ではありません。

質問:ファイルの属性 / 設定 / パーミッションを変更せずに、ファイルを正しく圧縮および解凍するにはどうすればよいですか。**または: ** 解凍後に、ファイルの正しい属性を再度設定するにはどうすればよいですか。

4

1 に答える 1

0

解決策を見つけました。

私が言及した他の質問/解決策で、彼はfileinfo.IsReadOnly = false;代わりに次のように変更するように言いました:

fileInfo.Attributes = FileAttributes.Normal

私にとっては逆でした。

したがって、このパラメーターを使用すると:

DirectoryInfo di = new DirectoryInfo(installDirectory);
Recurse(di);

私はこれを使用しました:

public void Recurse(DirectoryInfo directory)
{
    foreach (FileInfo fi in directory.GetFiles())
    {
        fi.Attributes = FileAttributes.Normal;
    }

    foreach (DirectoryInfo subdir in directory.GetDirectories())
    {
        Recurse(subdir);
    }
}

編集:

より良い解決策を見つけようとしてしばらくした後、このトピックに出会いました。それはそれを完全に解決しました。

于 2015-01-23T19:51:19.507 に答える