【问题标题】:The filename 'filename' already exists VB .NET文件名“文件名”已经存在 VB .NET
【发布时间】:2017-06-15 07:26:24
【问题描述】:

我想提取存档。 但问题是,当代码运行时,它会抛出下面的异常:

System.IO.IOException: '文件'filename'已经存在。'

这里是代码

File.WriteAllBytes(String_TempDir & "\rzip.zip", My.Resources.Resszip) 'I wrote the file from my application resources
Compression.ZipFile.ExtractToDirectory(String_TempDir & "\rzip.zip", String_TempDir) 'This line throws the exception
File.Delete(String_TempDir & "\rzip.zip")

在执行该代码之前我什么也没看到(没有文件)...

代码执行后,抛出异常,但是,我的存档文件已经被解压了。

我使用 Try 语句来区分异常,但它仍然抛出该异常...

Try
    Compression.ZipFile.ExtractToDirectory(String_TempDir & "\rzip.zip", String_TempDir)
Catch ex As IOException
    'That's it.
End Try

String_TempDir 是我分配给它的字符串:

'global declaration:
Dim folder As String = Path.Combine(Path.GetTempPath, Path.GetRandomFileName)
'End of global declaration

Public Function GetTempDir() As String

    Do While Directory.Exists(folder) Or File.Exists(folder)

        folder = Path.Combine(Path.GetTempPath, Path.GetRandomFileName)

    Loop

    Return folder

End Function

'Form loads
Directory.CreateDirectory(folder)
String_TempDir = folder

【问题讨论】:

标签: vb.net archive zipfile


【解决方案1】:

只是猜测,但可能是您将 Zip 文件放入要提取到的同一目录中。尝试提取到临时目录的子目录。例如

Compression.ZipFile.ExtractToDirectory(String_TempDir & "\rzip.zip", String_TempDir & "\extracted")

MSDN article on ExtractToDirectory 表示以下内容(强调我的):

此方法创建指定目录和所有子目录。 目标目录不能已经存在。 验证destinationDirectoryName 中的路径或 sourceArchiveFileName 参数在提取之前被抛出。 否则,如果在提取过程中发生错误,存档将保留 部分提取。每个提取的文件都有相同的相对路径 由destinationDirectoryName 指定为其源的目录 条目必须位于存档的根目录。

【讨论】:

    【解决方案2】:

    您是否也检查过 Zip 文件不包含任何重复的名称? 如果它在 Linux 上被压缩,它可能同时包含 Filenamefilename,这可能会导致此错误。尤其是你说它一开始不包含任何文件,而且似乎解压成功了。

    有点类似的问题here,但使用 7-Zip

    【讨论】:

      猜你喜欢
      • 2019-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 2014-05-18
      • 2023-04-06
      相关资源
      最近更新 更多