-1

我有一个仅上传 zip 文件的 RadUpload,所以我想在提取过程中重命名每个文件,我尝试了一种方法:

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

首先,它会重命名并提取第一个文件,但随后会出现此错误:

[已调整组:无法执行人口普查过程。]

任何想法?

4

2 回答 2

1

好像有问题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 秒,您很可能会收到错误 - 要么添加 ms,即,要么"ddMMyyhhmmssfff"在提取之前检查文件名是否不存在。

于 2017-01-09T14:02:53.953 回答
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 文件时发生令人讨厌的错误。

于 2017-01-09T15:22:30.233 回答