2017-01-09 22 views
-1

我有一個RadUpload是上傳zip文件只, 所以我想提取過程中的每個文件重命名, 我想一個辦法:重命名文件中提取(郵編)工藝ASP.Net

Protected Sub Upload(sender As Object, e As EventArgs) 

    Dim extractPath As String = Server.MapPath("~/temp/") 
    Dim file1 As String = RadUpload1.UploadedFiles(0).FileName 

    ExtractFileToDirectory(file1, extractPath) 

End Sub 

Public Sub ExtractFileToDirectory(zipFileName As String, outputDirectory As String) 

    Dim zip As ZipFile = ZipFile.Read(outputDirectory & zipFileName) 
    Directory.CreateDirectory(outputDirectory) 
    For Each e As ZipEntry In zip 

     Dim NewName As String = Now().ToString("ddMMyyhhmmss") 
     Dim newext As String = ".jpg" 
     e.FileName = NewName + newext 

     e.Extract(outputDirectory, ExtractExistingFileAction.OverwriteSilently) 
    Next 
End Sub 

在第一個它將重命名並提取第一個文件,但然後給出這個錯誤:

[已調整組:無法執行人口普查過程。 ]

有什麼想法嗎?

+0

您是否可以在成功提取後重命名文件? –

+0

是的,我想成功提取所有文件 –

回答

0

似乎有與outputDirectory

Dim zip As ZipFile = ZipFile.Read(outputDirectory & zipFileName) 
Directory.CreateDirectory(outputDirectory) 

在你試圖讀取outputDirectory & zipFileName第一線的問題,在第二行,你要創建的是路徑。

MSDN,你的代碼應該是類似

Using zip As ZipArchive = ZipFile.OpenRead(zipFileName) 
    For Each e As ZipArchiveEntry In zip.Entries 

    Dim NewName As String = Now().ToString("ddMMyyhhmmss") 
    Dim newext As String = ".jpg" 
    NewName += newext 
    e.ExtractToFile(Path.Combine(outputDirectory, NewName)) 

    Next 
End Using 

注:使用"ddMMyyhhmmss"作爲文件名,你如果解壓縮需要不到1秒的極有可能會得到一個錯誤 - 無論是加毫秒,即"ddMMyyhhmmssfff"或提取前檢查文件名是否不存在。

+0

正確的是我想要重命名,但當我複製你的代碼它說ZipArchive在未被識別 –

+0

我還添加了這個參考[Imports System.IO.Compression.ZipArchive],但不接受參考 –

+0

我將框架版本更改爲4.5後,您的代碼就像一個魅力一樣工作,感謝您的幫助,您節省了我的一天 –

0

由於您期望提取到「臨時」文件夾,因此您確實應該使用系統臨時文件夾。在您的Web應用程序中寫入數據是一種不好的做法。

使用以下方法來檢索系統定義的臨時文件夾

Private Sub Upload(sender As Object, e As EventArgs) 

Dim extractPath As String = System.IO.Path.GetTempPath() ' Better way to store temporary files 
Dim file1 As String = RadUpload1.UploadedFiles(0).FileName 

ExtractFileToDirectory(file1, extractPath) 

End Sub 

然後ExtractFileToDirectory函數內部創建一個全新的臨時文件夾(使用Guid.NewGuid()的ToString()來生成一個唯一的文件夾名稱),並解壓縮文件如@ 2316116所解釋的那樣,使用ExtractToFile方法。

遵循這種方法可以避免多個zip文件在同一時間解包時出現的討厭錯誤。

+0

您的代碼只是提取zip,我想在提取時重命名ZIP中的每個文件 –

+0

Mine是對@ 2316116答案的改進建議,因爲使用DateTime作爲名稱唯一性並非防彈,並且將文件寫入Web App文件夾是一種不好的做法。 –