【问题标题】:I'm trying to compress some files from one directory to another but I'm getting access denied on one of the directories why?我正在尝试将一些文件从一个目录压缩到另一个目录,但我在其中一个目录上被拒绝访问,为什么?
【发布时间】:2013-08-04 15:22:49
【问题描述】:

在Form1的构造函数中我做了:

contentDirectory = Path.GetDirectoryName(Application.LocalUserAppDataPath) + "\\SF_" + currentDate;
            zippedFileDirectory = Path.GetDirectoryName(Application.LocalUserAppDataPath) + "\\Default_ZippedFile_Directory";
            if (!Directory.Exists(zippedFileDirectory))
            {
                Directory.CreateDirectory(zippedFileDirectory);
            }
            if (!Directory.Exists(contentDirectory))
            {
                Directory.CreateDirectory(contentDirectory);
            }

第一次检查断点zippedFileDirectory不存在创建它,如果不存在则什么都不存在。 contentDirectory 也一样。

现在我在这里有contentDirectory

C:\\Users\\bout0_000\\AppData\\Local\\Diagnostic_Tool_Blue_Screen\\Diagnostic Tool Blue Screen\\SF_04-08-13

contentDirectory 里面我有大约 10 个文件。

那么zippedFileDirectory就是:

C:\\Users\\bout0_000\\AppData\\Local\\Diagnostic_Tool_Blue_Screen\\Diagnostic Tool Blue Screen\\Default_ZippedFile_Directory

这个目录是空的。

然后我有这个Compress() 方法:

private void Compress()
{
            string source = contentDirectory;
            string output = zippedFileDirectory;
            string programFilesX86 = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86) + "\\Diagnostic Tool\\7z.dll";
            if (File.Exists(programFilesX86))
            {
                SevenZipExtractor.SetLibraryPath(programFilesX86);
            }
            string programFiles = System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) + "\\Diagnostic Tool\\7z.dll";
            if (File.Exists(programFiles))
            {
                SevenZipExtractor.SetLibraryPath(programFiles);
            }
            SevenZipCompressor compressor = new SevenZipCompressor();
            compressor.ArchiveFormat = OutArchiveFormat.Zip;
            compressor.CompressionMode = CompressionMode.Create;
            compressor.TempFolderPath = System.IO.Path.GetTempPath();
            compressor.CompressDirectory(source, output);
            Process.Start(Path.GetFullPath(zippedFileDirectory));
}

由于某种原因上线了:

compressor.CompressDirectory(source, output);

我遇到了异常:

拒绝访问路径“C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\Default_ZippedFile_Directory”。

System.UnauthorizedAccessException 未处理
HResult=-2147024891
Message=拒绝访问路径“C:\Users\bout0_000\AppData\Local\Diagnostic_Tool_Blue_Screen\Diagnostic Tool Blue Screen\Default_ZippedFile_Directory”。

我不明白为什么这个zippedFileDirectory 被锁定或拒绝访问?

如果我选择任何其他目录作为源,例如d:\test,则没有问题。

【问题讨论】:

  • 文件是否在某处打开?
  • 这对我有用:在构造函数中我最后添加到这一行 \\ zippedFileDirectory = Path.GetDirectoryName(Application.LocalUserAppDataPath) + "\\Default_ZippedFile_Directory\\";在 compress() 方法中我做了:compressor.CompressDirectory(source, output + "Diagnosis_Files.zip");最后添加了一个文件名。现在它的工作。谢谢。
  • 您可能需要考虑使用 Path.Combine,而不是添加字符串来构建路径。

标签: c# winforms


【解决方案1】:

它不起作用,因为您将第二个参数的目录名称传递给 CompressDirectory。
您应该传递一个文件名,例如....

    string output = Path.Combine(zippedFileDirectory, "MyZipFile.7z");
    .....

    compressor.CompressDirectory(source, output);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-20
    • 2012-02-15
    • 1970-01-01
    相关资源
    最近更新 更多