2017-01-09 6 views
-1

私は 、私は抽出処理中に、各ファイルの名前を変更したい 、アップロードが唯一のzipファイルをすることを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

yea私はすべてのファイルを正常に抽出した後に名前を変更したい –

答えて

0

あなたがそのパスを作成しようとしている2行目に、outputDirectory & zipFileNameを読み取ろうとしている最初の行でoutputDirectory

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

に問題があるようです。いずれかのMSを追加、すなわち"ddMMyyhhmmssfff"または - ファイル名として"ddMMyyhhmmss"を使用すると、あなたが最も可能性の高い解凍が1秒未満を取る場合はエラーになります:

MSDNを参照してください、あなたのコードは、NOTE

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 

のようになります。抽出前にファイル名が存在しないか確認してください。

+0

正確に何が欲しいのですが、あなたのコードをコピーするとZipArchiveが認識されないと言われます –

+0

また、この参考文献[Imports System.IO.Compression.ZipArchive]参照 –

+0

フレームワークのバージョンを4.5に変更した後、あなたのコードが魅力的に働いた、助けてくれてありがとうございました –

0

"temp"フォルダに展開する予定があるので、実際にはシステムの一時フォルダを使用する必要があります。あなたのWebアプリケーション内にデータを書き込むことは悪い習慣です。

はその後ExtractFileToDirectory関数内で使用すると、(ユニークなフォルダ名を生成するGuid.NewGuid() .ToString()を使用します)とファイルを解凍し、ブランドの新しい一時フォルダを作成し

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 

にシステム定義の一時フォルダを取得するには、以下を使用します@ 2316116で説明されているように、ExtractToFileメソッドを使用します。

このアプローチに従うと、複数のzipファイルが同時に開かれているときに発生する厄介なエラーを防ぐことができます。

+0

あなたのコードはzipを抽出するだけです。抽出中にzip内の各ファイルの名前を変更したい –

+0

名前の一意性のためにDateTimeを使用していて、Web Appフォルダにファイルを書き込むので、Mineは@ 2316116悪い習慣です。 –

関連する問題