文件名“文件名”已经存在 VB .NET

Posted

技术标签:

【中文标题】文件名“文件名”已经存在 VB .NET【英文标题】:The filename 'filename' already exists 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

【问题讨论】:

在docs 中,IOException 情况下列出了许多原因。检查其中一个是否适用 System.IO.Compression and ZipFile - extract and overwrite的可能重复 【参考方案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

【讨论】:

以上是关于文件名“文件名”已经存在 VB .NET的主要内容,如果未能解决你的问题,请参考以下文章

使用 VB.NET 使用用户定义的文件名保存 excel 工作簿(此语句有啥问题?)

如何从 vb.net 的播放列表中显示媒体播放器正在播放的文件?

VB做了个小软件,但是当打包展开向导时,点击打包 错误提醒说"路径不包含文件名"(已经编译好了EXE文件)

VB UTF-8 问题

vb.net - 基于模式搜索文件

vb.net高手帮忙看一下这个从listbox中截取字符串的代码哪里不对