0

助けてください... フォルダーを解凍しようとすると、「ファイルが存在します」というエラーが表示されます。最初は、コードは正常に動作しますが、「ファイルが存在します」というメッセージが表示されました。ここに私のコードがあります:

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 を使用しています よろしくお願いします

4

2 に答える 2

3

私は私の問題の答えを見つけました(stackoverflowのおかげです)

問題: 同じファイルを繰り返し解凍すると、解凍されたファイルのコピーが一時ディレクトリに作成されます。一時ディレクトリが制限 (99 コピー) に達すると、「ファイルが存在します」というエラーが発生します。

一時ディレクトリの場所:「C:\Documents and Settings(ユーザー アカウント)\Local Settings\Temp」。

(My.Computer.FileSystem.SpecialDirectories.Temp) または (Environment.GetEnvironmentVariable("TEMP")) を使用して、.net でそれらにアクセスできます。

解決策:ファイルを解凍(抽出)する前に、まず一時フォルダーの以前のコピーを削除します。一時ディレクトリをクリアするためのコードは次のとおりです。

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

上手く説明できませんが、質問やアドバイス等ありましたらお気軽にコメントください。

于 2013-03-21T09:54:46.850 に答える
0

この行で

m_Output.CopyHere(m_Source.Items, 4)

値を16に変更するとどうなりますか?

m_Output.CopyHere(m_Source.Items, 16)

ファイルがすでに存在する場合、それはファイルを上書きしますか?

于 2013-03-19T06:27:04.813 に答える