文件名'filename'已经存在VB .NET

文件名'filename'已经存在VB .NET

问题描述:

我想提取归档文件。 但问题是,代码运行时,它抛出下面的异常:文件名'filename'已经存在VB .NET

System.IO.IOException:“文件‘文件名’已经存在。”

这里是代码

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 
    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 
+0

在[文档](https://msdn.microsoft.com/en-us/library/system.io.compression.zipfileextensions.extracttodirectory(五= vs.110).aspx)IOException中列出了许多原因。检查其中一个是否适用 – Steve

+0

[System.IO.Compression和ZipFile - 提取并覆盖]的可能重复(https://*.com/questions/15464740/system-io-compression-and-zipfile-extract-and-覆盖) – Pikoh

只是猜测,但这可能是因为你正在将Zip文件放到你要提取的同一个目录中。尝试解压到临时目录的子目录。例如

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

MSDN article on ExtractToDirectory说以下(重点煤矿):

此方法创建指定的目录和所有子目录。 目标目录不能存在。与 相关的异常在验证目标目录名称中的路径或 sourceArchiveFileName参数时会在提取之前引发。 否则,如果在提取过程中发生错误,归档仍然为 部分提取。每个提取的文件具有相同的相对路径,以 destinationDirectoryName指定的目录作为源 条目必须归档的根目录。

你是否还检查过Zip文件不包含任何重复的名称? 如果它是在Linux上压缩的,它可能同时包含Filenamefilename,并且可能会导致此错误。特别是因为你说它最初不包含任何文件,而且它似乎可以成功解压缩它。

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