【发布时间】:2015-03-22 18:28:29
【问题描述】:
听起来像是只读文件,对吧?不是真的。
所以我的目标是通过简单地将它们压缩为 .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”,所有检查都设置为 Allowed。 再次手动设置此组后,我看到了一些改进,但仍然出现其他错误,例如无法登录,用户 [当前用户] 登录失败
编辑: 上述安全选项卡的问题是因为我使用了 Recurse 方法。让事情变得更糟。所以对所有文件使用file.IsReadOnly = false并不是一个好的解决方案。
问题:如何正确压缩和解压缩文件而不更改其属性/设置/权限。 **或者:**解压后如何重新设置文件的正确属性。
【问题讨论】:
-
阅读我尝试过的内容,它与该问题中的答案相匹配。那是我得到第一个解决方案的地方,但没有奏效。
-
由于文件没有被设置为只读(这实际上是
ZipFile可能设置的唯一内容,并且仅当该属性在创建时被复制到存档中),您几乎可以肯定是在处理安全问题,而不是编程问题。您只需要确保解压存档的过程由您希望成为解压文件所有者的帐户运行,和/或您将文件解压到访问权限与您想要的目录匹配的目录中(即文件从目录继承,并且您希望的用户可以访问)。
标签: c# compression system.io.fileinfo file-properties