2

AmazonS3にフォルダを作成する必要があります。次に、zipファイルでそのフォルダを変換する必要があります。DotNetZipLiberaryを使用して.zipファイルに変換しました。これがそのためのリンクです

http://dotnetzip.codeplex.com/wikipage?title=CS-例

public void ConvertToZip(string directoryToZip, string zipFileName)
{
    try
    {

        using (client = DisposableAmazonClient())
        {
            var sourDir = new S3DirectoryInfo(client, bucket, directoryToZip);

            var destDir = new S3DirectoryInfo(client, bucket, CCUrlHelper.BackupRootFolderPhysicalPath);

            using (var zip = new ZipFile())
            {
                zip.AddDirectory(sourDir.FullName); // recurses subdirectories
                zip.Save(Path.Combine(destDir.FullName, zipFileName));
            }
        }

        logger.Fatal("Successfully converted to Zip.");
    }
    catch (Exception ex)
    {
        logger.Error("Error while converting to zip. Error : " + ex.Message);
    }
}

コードを実行すると、「指定されたパスの形式はサポートされていません」というエラーが表示されます。

4

1 に答える 1

3

S3DirectoryInfo はディレクトリ構造をエミュレートしますが、実際のディレクトリ構造ではなく、DotNetZip は S3 内のオブジェクトを指す文字列を処理する方法を知りません。これを行うには、ファイルをダウンロードして圧縮し、結果の zip ファイルをアップロードする必要があります。これを行う方法を示すサンプル コードを次に示します。

クラス プログラム
{
    static void Main(string[] args)
    {
        var zipFilename = @"c:\temp\data.zip";
        var client = new AmazonS3Client();
        S3DirectoryInfo rootDir = new S3DirectoryInfo(client, "norm-ziptest");
        使用 (var zip = new ZipFile())
        {
            zip.Name = zipFilename;
            addFiles(zip, rootDir, "");
        }

    // Move local zip file to S3
    var fileInfo = rootDir.GetFile("data.zip");
    fileInfo.MoveFromLocal(zipFilename);
}

static void addFiles(ZipFile zip, S3DirectoryInfo dirInfo, string archiveDirectory)
{

    foreach (var childDirs in dirInfo.GetDirectories())
    {
        var entry = zip.AddDirectoryByName(childDirs.Name);
        addFiles(zip, childDirs, archiveDirectory + entry.FileName);
    }

    foreach (var file in dirInfo.GetFiles())
    {
        using (var stream = file.OpenRead())
        {                    
            zip.AddEntry(archiveDirectory + file.Name, stream);

            // Save after adding the file because to force the 
            // immediate read from the S3 Stream since 
            // we don't want to keep that stream open.
            zip.Save(); 
        }
    }
}

}

于 2013-03-11T22:28:32.737 に答える