解压缩后无法修改文件

时间:2015-01-23 16:43:49

标签: c# compression system.io.fileinfo file-properties

听起来像只读文件,对吧?不是真的。

所以我的目标是通过简单地将它们压缩为.zip文件来备份我构建的应用程序中的所有文件。 首先,我收集所有文件并将它们放在另一个文件夹中(例如,我不需要备份.exe文件)。然后我使用IO.compression.ZipFile

压缩它们
ZipFile.CreateFromDirectory(backupDirectory, ZipDirectory);

稍后,当用户想要恢复备份时,我首先删除现有的文件和目录,然后将其解压缩:

ZipFile.ExtractToDirectory(openFileDialog1.FileName, installDirectory);

问题: 文件现在是只读的,一个文件是.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);
        }
    }
来自this question.

没有工作。而且我不希望它工作,因为“只读”'不在.mdf属性上检查标志。另外,在查看“安全”选项卡时:

SYSTEM,Admin和User是相同的,我缺少的是组名' Everyone'将所有检查设置为“允许”。 再次手动设置此组后,我看到了一些改进,但是仍然遇到其他错误,例如无法登录,用户登录失败[当前用户]

编辑:上述安全标签的问题是因为我使用了Recurse方法。让事情变得更糟。因此,对所有文件使用file.IsReadOnly = false不是一个好的解决方案。

问题:如何在不更改文件属性/设置/权限的情况下正确压缩和解压缩文件。 **或者:**解压后如何再次为文件设置正确的属性。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

在我提到的其他问题/解决方案中,he said要更改为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);
    }
}

修改

经过一段时间试图找到更好的解决方案之后,我来了across this topic。这完全解决了它。