2013-08-03 32 views
1

在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 \診斷工具藍屏\ Default_ZippedFile_Directory'被拒絕。

System.UnauthorizedAccessException的是未處理
的HResult = -2147024891
消息=訪問路徑 'C:\用戶\ bout0_000 \應用程序數據\本地\ Diagnostic_Tool_Blue_Screen \診斷工具藍屏\ Default_ZippedFile_Directory' 被拒絕。

我不明白爲什麼這個zippedFileDirectory被鎖定或訪問被拒絕?

如果我選擇任何其他目錄作爲源例如d:\test沒有問題。

+0

您是否在某處打開該文件? – Spencer

+0

這是爲我工作: 在構造我加入到這一行到底\\ zippedFileDirectory = Path.GetDirectoryName(Application.LocalUserAppDataPath)+ 「\\ Default_ZippedFile_Directory \\」; 而在compress()方法中,我做了: compressor.CompressDirectory(source,output +「Diagnosis_Files.zip」); 最後添加了一個文件名。 現在它的工作。 謝謝。 – DanielVest

+0

您可能需要考慮使用Path.Combine,而不是通過添加字符串來構建路徑。 –

回答

3

它不起作用,因爲您將第二個參數的目錄名傳遞給CompressDirectory。
您應該傳遞文件名稱,例如....

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

    compressor.CompressDirectory(source, output); 
相關問題