Zip圧縮でファイルの追加が出来ない


Rad命  2013-09-09 18:27:37  No: 45212  IP: 192.*.*.*

お世話になります。

環境は、
    Win7 + TurboDelphi2006
になります。



http://ht-deko.minim.ne.jp/tech049.html

を参考にし、

  zipFiles.CompressZipFile(
    zip+'.zip'//Zipファイル名
    , src     //圧縮ファイル名
  );

にて呼び出してZipファイルを作成しているのですが、
圧縮ファイル自体は作成されるのですが、
圧縮したいファイルが添付されません。

他のZip圧縮ライブラリも幾つか試してみたのですが、
圧縮ファイルの作成は出来ても、
圧縮ファイルの追加が出来ません。


個人的には、windowsが何らかの阻害をしているのでは、と、
勝手に勘ぐってたりしているのですが、
今までそんな事も無く。。。


以前、Zip圧縮を扱うコードを、上記を参考にして動いた事があるので、
何故、今回動かないのか、まったく理解に苦しんでおります。
(前回のコードは大ポカをして消失してしまい、
  ヴァージョンアップのため一から書き直している最中のため、
  比較の使用も無く・・・。)


どなたか、似たような現象をお知りの方、
解決策をご存知の方がいらしましたら、
お知恵を拝借願えないでしょうか?

編集 削除
RAD命  2013-09-10 15:34:54  No: 45213  IP: 192.*.*.*

どうにも原因がわからず、Delphiではなく、C++BuilderXE2で、
system.zipを使った簡単なサンプルを書いてみました。

コードの問題かもしれないですが、
これを実行すると、

    ファイルを作成できません。
    アクセス権限がありません。


と、跳ね返されてしまいます。

因みに、以前作ったzip圧縮は同じ7の異なるpc上で動いており、
今作成中のものは、作成環境でも、動作先環境でも、
圧縮ファイルの追加が出来ません。

以下が、c++で書いてみた、サンプルです。
  
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if ( Form1->OpenDialog1->Execute() ) {
  //保存先のzipを指定
  if (Form1->OpenDialog2->Execute()) {
        //zipに追加したいファイルを指定
    new TZipFile->Open
           (Form1->OpenDialog1->FileName,zmReadWrite);
    new TZipFile->Add
           (Form1->OpenDialog2->FileName,//追加したいファイル
            Form1->OpenDialog1->FileName);//zipファイル
    }
  }

}

色々ググって見ると、OSの問題っぽい気が・・・。
もし、コードに問題が無ければ、OSの問題という事でしょうか???

編集 削除
RAD命  2013-09-11 14:29:42  No: 45214  IP: 192.*.*.*

追加報告になります。

C++Builderでも動かなかったので、
Delphi3で色々コンポーネントを探して試行錯誤した結果、
動きました。

以下がコンポーネントのサイトと、
コードです。

http://www.torry.net/pages.php?s=99

TZIP


即席で作ってみたサンプルコード


procedure TForm1.Button1Click(Sender: TObject);
var
 zip: TZip;
 sl:TStringlist;
begin
  sl := TStringlist.Create;
  sl.Clear;
  zip := jbzip.TZip.Create(self);
  sl.Text := form1.FileListBox1.Items.Text;
  zip.ArcName := 'aaa.zip';
  zip.Crunch('c:\' + zip.ArcName,sl,'c:\');
end;

何故、Delphi3で、このコンポーネントで動いて、
Scizip他、他の圧縮ライブラリでは動かないのか??

依然謎です。
引き続き調べてみます(継続して難儀中^^;)。

編集 削除
tor  2013-09-11 16:27:04  No: 45215  IP: 192.*.*.*



まず一つ目について、リンク先にある関数の宣言を見ると次のようになっています。
ヲサヲサヲサテレニィヲサニホャヲサモトコヲサヤニホゥサ
二番目の引数に期待されているのは「ディレクトリ名」です。
実際、掲載されているソースコードを見ると、モトワェョェヲサのファイルを検索してレノミに格納しているのがわかります。
なので、圧縮したいファイル名ではなく、そのファイルがあるディレクトリ名を指定しなくてはいけません。
「ディレクトリ全体ではなく、指定したファイルだけ圧縮したい」というのであれば、そのようにソースを改造する必要があるでしょう。

二つ目のは、を二回しているのが原因ではないですか?
ヲサヲサヲサヤレニュヲサマィョョョゥサ
ヲサヲサヲサヤレニュヲサチィョョョゥサ
これは次のようなことをしているのと同じです。
  ヲサスヲサヲサヤレニサ
  ヲサスヲサヲサヤレニサ
  ュヲサマィョョョゥサ
  ュヲサチィョョョゥサ
とはまったくの別人です。さんに「ファイルを追加しろ」と言っても、さんとは赤の他人なので何もできません。正しくはこうではないでしょうか。
  ヲサスヲサヲサヤレニサ
  ュヲサマィョョョゥサ
  ュヲサチィョョョゥサ
スススススススススススススススススススススススススススススススススススススススス
ニコ メチト命
トコ イーアウッーケッアイィ木ゥ アウコアアコーー シ  スュアセシ初心者セ シッニセシノヘヌ ス「コッッョョョッッアョ「 ス「ー「セ 書込者ノト:ロ 「。」・ ン
モコ 

ヲサさん

ありがとうございます、
無事解決しました。

イ個目の引数はフォルダとは思いもしませんでした。

なんと、恥ずかしくらいの単純なミスだったんですね・・・。
ソースをよく読む・・・癖つけます;。


テォォツのアドバイスもありがとうございます。

無事動作しました。

ヲサヲサヤレニヲサェサ
ヲサヲサヲサスヲサヲサヤレニサ
ヲサヲサュヲサマィ「ョ「ャヲサラゥサ
ヲサヲサュヲサチィフ「ミアョ「ャフ「ミアョ「ゥサ
ヲサヲサュヲサティゥサ

で、動作しました。

今回は、本当に助かりました。
ありがとうございました。

編集 削除