重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

C#で作成した、CSVをFTPでウェブサーバにアップロードするプログラムがあるのですが、
運用と共にCSVファイルのサイズと数が増えパフォーマンスが悪くなってきたので、
CSVをZIPで圧縮することにしました。

C:\data\read.csv を読み込んで同じ場所に write.zip として出力するという処理を、
System.IO.Compression 系の ZipArchive を使って、

  using (var zipStream = File.Create(@"C:\data\write.zip")) {
    using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create)) {
      var entry = archive.CreateEntry("read.csv");
      using (var sourceStream = File.OpenRead(@"C:\data\read.csv")) {
        using (var entryStream = entry.Open()) {
          sourceStream.CopyTo(entryStream);
        }
      }
    }
  }

のようにしてみたところ、C:\data\write.zip は作成されるのですが、
これを解凍すると write\read.csv となってしまいます。
(write フォルダができて、その下に元のCSVができる。)

解凍した際にフォルダを含まないように
(フォルダを含んだ圧縮ファイルにならないように)
圧縮することはできませんでしょうか?

よろしくお願いします。

A 回答 (1件)

write.zip自体に「write」フォルダが作成されているのでは無く、zipの展開に使っているソフトが「write」フォルダを生成しているように思えます。


使用しているソフトによっては「アーカイブ名でフォルダを作成」のようなオプションがある場合があるので、そのチェックを外すとフォルダは作られなくなるはずですよ。

zipファイル自体にフォルダが含まれているかどうかは、zipファイルをエクスプローラーなどで開くと確認できると思います。

この回答への補足

すみません。
お礼だけして、BAをして閉じるのを忘れていました。
どうもありがとうございました。

補足日時:2014/10/22 21:42
    • good
    • 0
この回答へのお礼

早速回答をいただきまして、ありがとうございます。

解凍する側のソフトの設定だとは知りませんでした。

単にエクスプローラから「開く」としてもフォルダが作成されていたので、
フォルダ付きで圧縮されているものとばかり思っていましたが、
使用している Lhaplus の「フォルダを自動作成する」の指定を外すと、
このソフトを使ったときにフォルダができていなかっただけでなく、
エクスプローラの「開く」からでもファイルのみ取り出すことができました。

勉強になりました。

おかげさまで、プログラムを作成できそうです。

ありがとうございました。

お礼日時:2014/10/21 20:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!