0

ここで、dotnetzipを使用してディレクトリの内容を圧縮しようとしていますが、次のエラー メッセージが表示されます: URI 形式はサポートされていません。
これを行うために使用するコードは次のとおりです。

string strDirectoryName="http://zyx.blob.core.windows.net/myfiles/mymusic"
       using (ZipFile zip = new ZipFile())
            {
                zip.AddDirectory(strDirectoryName);
                zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G");
                zip.Save("zipFileToCreate");
            }

ここで同様の質問への回答を調べました。また、同じ URL 形式に従っているのに、なぜこのエラーが発生するのかを調べました。このエラーの解決を手伝ってください

上記のコードを次のように変更すると、zip ファイルが作成されますが、破損しています。私のブロブ コンテナー 'myfiles' で、zip ファイル内の同じフォルダー構造を保持しながら、myMusic フォルダー内のすべてのファイルとフォルダーを読み取ることによって、"mymusic.zip" という名前の zip ファイルを作成したいと考えています。次のコードは、zip ファイルを作成します。しかし、zipファイルが破損しています。これを解決するための提案はありますか?

string ofurl = @"http://myxyzstorage.blob.core.windows.net/myfiles/mymusic";
            string ofBlob = @"http://myxyz.blob.core.windows.net/myfiles";
          dBlob = new CloudBlob(blobClient.GetBlobReference(ofBlob));

            using (var zipFile = new ZipFile())
            {
                byte[] fileBytes = dBlob.DownloadByteArray();
                using (var fileStream = new MemoryStream(fileBytes))
                {
                    fileStream.Seek(0, SeekOrigin.Begin);
                    zipFile.AddEntry(ofurl+".zip", fileBytes);
                }
                var sas = offlineContainer.GetSharedAccessSignature(new SharedAccessPolicy()
                {
                    Permissions = SharedAccessPermissions.Write,
                 // SharedAccessExpiryTime = DateTime.UtcNow.AddSeconds(this.timeOutSeconds)
                });

                using (var zipStream = new MemoryStream())
                {
                    zipFile.Save(zipStream);
                    zipStream.Seek(0, SeekOrigin.Begin);
                    var blobRef = ofContainer.GetBlobReference(ofurl);
                    blobRef.UploadFromStream(zipStream);
                }

            }

上記のコードを使用すると、zip ファイルが破損するのはなぜですか?

4

2 に答える 2

1

このサイトは、問題と解決策の両方に対処しているようです。

チーズ -DotNetZip can read from filesystems. It cannot read from http sources. An easy way to do what you want is to send a GET request to the HTTP resource, and then pass the ResponseStream to the call to AddFile().

次に、サンプル ソリューションのコードを作成します。

于 2013-09-23T20:53:42.603 に答える
0

私は dotnetzip には詳しくありませんが、あなたの問題は知っていると思います。

サーバーへのアイテムにアクセスするときは、URI (Web アドレス) ではなく、サーバー パスを使用します。http://your.websiteオペレーティング システムは、それが実際にその一部であることを知りません。c:\\web\website\somedirectory

于 2013-09-23T20:53:05.060 に答える