2015-11-03 34 views
0

我試圖寫一個小控制檯應用程序的工具,解壓包含多個文件/文件夾/其他檔案的歸檔,並安排它的內容以另一種方式。等待.zip文件,以複製之前提取的內容別處programmaticaly

我解壓縮與ZipFile.ExtractToDirectory法根文件從System.IO.Compression.FileSystem庫:

public static void UnzipPackage(string packagePath, string targetPath) 
{ 
    try 
    { 
     ZipFile.ExtractToDirectory(packagePath, targetLocation); 
     Console.WriteLine("Unzipping file {0} complete.", packagePath); 
    } 
    catch (DirectoryNotFoundException) 
    { 
     Console.WriteLine("Directory was not found."); 
    } 
    catch (FileNotFoundException) 
    { 
     Console.WriteLine("File was not found."); 
    } 
} 

在我的包上運行此方法後,我想複製這是此包中的子文件夾中的文件。

根據MSDN我這樣做:

if (!Directory.Exists(targetLocation + @"READY\PHOTO")) 
{ 
    Directory.CreateDirectory(targetLocation + @"\READY\PHOTO"); 
} 
if (Directory.Exists(targetLocation + @"\MAIN\PHOTO")) 
{ 
    string[] files = Directory.GetFiles(targetLocation + @"\MAIN\PHOTO"); 
    foreach (var file in files) 
    { 
     string fileName = Path.GetFileName(file); 
     string destFile = Path.Combine(targetLocation + @"\MAIN\PHOTO", fileName); 
     File.Copy(file, destFile, true); 
    } 
} 

兩個MAINREADY是我的子目錄,其中全包去(「主」)和排序的文件去(「準備好了」)。

但是,運行此操作時,zip文件尚未解壓縮 - 發生異常,表明它無法訪問指定的文件,即使它從Directory.GetFiles()中獲取了該文件的名稱。解壓zip文件時創建的文件夾僅在我終止我的控制檯應用程序後顯示(難怪無法訪問它)。

因此,最大的問題是 - 我怎麼能等待解壓縮文件夾露面?我嘗試使用Thread.Sleep(),但它不會影響流 - 無論如何仍然會發生異常,並且該文件夾僅在我終止應用程序後才顯示。

+0

你能顯示完整的代碼示例,所以我們可以看到2個代碼是如何結合在一起,而不是尋找無關 – TheLethalCoder

回答

1

我假設你得到一個IOException類似「該進程無法訪問該文件......因爲它正被另一個進程使用。」

在我看來,有您的複製方法的問題。看起來你的路徑和路徑基本相同。所以系統不能覆蓋文件,因爲你現在已經開放閱讀了。

只要是明確的 - 這個問題是不相關的解壓!在這個例子中,你寫的變量filedestFile將是相同的 - 他們需要不同。

+0

噢,我的。一個愚蠢的複製和粘貼錯誤,這讓我瘋狂的幾個小時。感謝您爲我發現這個。 – Asunez

1

你的錯誤是在這裏:

string destFile = Path.Combine(targetLocation + @"\MAIN\PHOTO", fileName); 

應該是:

string destFile = Path.Combine(targetLocation + @"\READY\PHOTO", fileName); 

您正在嘗試將文件複製到同一位置。

+1

你和馬特的回答基本上是一樣的,但是他快了大約15分鐘,所以綠色的嘀嗒聲響到他身上。儘管讚賞你的回答,以感謝你的貢獻。 – Asunez

相關問題