2013-03-19 25 views
0

請幫助... 當我嘗試解壓縮文件夾時出現「The file exists」錯誤。 起初,代碼工作正常,但後來我遇到了「文件存在」 這是我的代碼:vb.net上的「文件存在」錯誤使用shell解壓縮32

Private Sub unzip(ByVal Source As String, ByVal Output As String) 
    Dim m_Sc As New Shell32.Shell 
    If Directory.Exists(Output) Then 
     Directory.Delete(Output) 
    End If 
    Dim m_Output As Shell32.Folder = m_Sc.NameSpace(Output) 
    Dim m_Source As Shell32.Folder = m_Sc.NameSpace(Source) 
    m_Output.CopyHere(m_Source.Items, 4) 
End Sub 

我使用vb.net(3.5)2008年 預先感謝

回答

0

在此行

m_Output.CopyHere(m_Source.Items, 4) 

如果將其更改爲值16,會發生什麼情況?

m_Output.CopyHere(m_Source.Items, 16) 

是否覆蓋文件,如果它已經存在?

+0

我將它改爲16,但它仍然提示錯誤「The file exists」。 – 2013-03-19 07:14:31

+0

我建議編號16嘗試覆蓋已存在的文件(具有相同的名稱)。參考信息可以在下面的鏈接中找到。我猜它只是一個讓你的文件操作標誌正確的情況? http://msdn.microsoft.com/en-us/library/windows/desktop/bb787866.aspx – Zeddy 2013-03-19 07:27:23

+0

感謝您的鏈接。如果我使用16它顯示對話框「確認文件夾替換」,但是當我點擊「是所有」然後它仍然會提示錯誤「該文件存在」,什麼也沒有發生。無論如何,謝謝汗,我需要仔細檢查我的代碼。 – 2013-03-19 08:05:04

2

,我發現我的問題的答案(感謝計算器)

問題:當我反覆解壓縮同一個文件,它會創建已提取的文件上的臨時目錄的副本。 如果臨時目錄已達到其限制(99個副本),則會導致錯誤「文件存在」。

臨時目錄位置:「C:\ Documents and Settings(您的用戶帳戶)\ Local Settings \ Temp」。

您可以使用(My.Computer.FileSystem.SpecialDirectories.Temp)或(Environment.GetEnvironmentVariable(「TEMP」))在.net中訪問它們。

解決方案: 之前unziping(提取)的文件,我第一次刪除臨時文件夾以前的副本.. 這裏是我的清除臨時目錄編號:

Sub CleanUpTemporaryFiles() 
    Dim m_StrTemporaryDirectory As String = "" 

    'Get the Temporary folder directory 
    m_StrTemporaryDirectory = Environment.GetEnvironmentVariable("TEMP") 
    If Directory.Exists(m_StrTemporaryDirectory & _ 
         "\Temporary Directory 1 for " & _ 
         m_ApplicationName & ".zip\") Then 

     Dim directory As String = m_StrTemporaryDirectory & _ 
           "\Temporary Directory 1 for " & _ 
            m_ApplicationName & ".zip\" & _ 
            m_ApplicationName 

     Dim dirInfo As New DirectoryInfo(directory) 
     'Loop on all the files 
     For Each f In IO.Directory.GetFiles(directory, "*.*", SearchOption.AllDirectories) 
      'Change the the file attribute to not read only so that it will not get an error deleting the file 

      File.SetAttributes(f.ToString, File.GetAttributes(f.ToString) _ 
           Xor FileAttributes.ReadOnly Or FileAttributes.Hidden) 
      'Delete the file 
      File.Delete(f) 
     Next 

     If System.IO.Directory.Exists(My.Computer.FileSystem.SpecialDirectories.Temp & _ 
             "\Temporary Directory 1 for " & m_ApplicationName & ".zip") Then 

      System.IO.Directory.Delete(My.Computer.FileSystem.SpecialDirectories.Temp & _ 
             "\Temporary Directory 1 for " & m_ApplicationName & ".zip", True) 

     End If 
    End If 
End Sub 

我不是擅長解釋事物,但如果您有任何問題或建議,請隨時發表評論。

相關問題