- ベストアンサー
Active Basic フォルダを1つのファイルにする
ActiveBasic4.23.00を使用しています。 今回、フォルダをファイルにしたり、ファイルにしたフォルダを元に戻したりするやり方を教えていただきたいのですが・・・ 複数のファイルが入ったフォルダを、圧縮も何もしなくていいのでファイルにまとめる処理のやり方と、 そのまとめたファイルを、元に戻すやり方を探しています。 『ZIPでいいのでは?』と思われるとは思いますが、 そういうのではなく、純粋にやり方を探しています。 やりたいことが、それですので… ご存知の方がいらっしゃいましたら、やり方を教えてください。 お願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
お疲れ様です。 >>ReadSizeで読み込むサイズをどうすれば良いか? そのために、最初の回答で答えた考え方に行き着くのだと思います。 ファイル1つに対して以下の4個の情報を保存していきます。 (1)相対ファイル名のサイズ (2)相対ファイル名 (3)ファイルサイズ (4)ファイルのデータ 可変長のデータを扱う際には、必ず固定長のデータを必要とします。 上記例でいえば(1)と(3)。 (長さを保存するための固定長データ) 以上
その他の回答 (2)
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
お疲れ様です。 申し訳ありません、「すごい事を考えるな」と思ってしまいました。 まず、SetFileAttributesの関数は属性を変更するだけでファイルをまとめたり圧縮するような関数ではありません。 私が記入した方法は まとめる際には1個1個ファイルをバイナリで開いて、別のファイルにまとめる。 元に戻すときは、まとめたファイルを開いて1個1個のファイルに戻す。 という地道な作業を指していました。 もしかしたら、簡単に1個にまとめる方法があるのかもしれませんが、少なくとも私は知りません。 以上 よろしくお願い致します。
- toda hiro(@hiro_knigh)
- ベストアンサー率39% (59/151)
お疲れ様です。 そんなのは作り方次第では無いのかと思ってしまうのは気のせいでしょうか? ちなみに、どんな方法でやろうとして失敗したのかをお教え願いたいです。 ディレクトリ内のファイル一覧を取得する方法は参照URLのホームページを参照して下さい。 ちなみに私が考えた単純な方法は以下の通りです。 ・以下のデータの塊をファイルの個数分保存する (1)(2)の文字列の長さ (2)相対ディレクトリ+ファイル名 (3)(4)のサイズ (4)(2)のファイルのバイナリデータ
お礼
ご回答ありがとうございます。 自分がとった方法は、 とりあえず、『・・・SetFileAttributes関数でメッセージ送れば何とかなるんじゃね?』と、 フォルダーまでのパスを取得し、SetFileAttributes関数でFILE_ATTRIBUTE_ARCHIVEを送ってみました。 結果、変化なし。 そして、考えていただいた方法ですが・・・ FindFirstFile・FindNextFile関数で、フォルダー内のファイルを取得していった後、それをどう1つにまとめるのでしょう・・・ また、それを元に戻すとき、どうすればいいのでしょうか・・・ よくわかっていなくて、申し訳ありません。 知識をお貸しください
お礼
ご回答ありがとうございます。 >申し訳ありません、「すごい事を考えるな」と思ってしまいました。 ええ、自分でもバカやってるな~と思いながら実験してました。 予想通りの結果でしたよ。 >まとめる際には1個1個ファイルをバイナリで開いて、別のファイルにまとめる。 >元に戻すときは、まとめたファイルを開いて1個1個のファイルに戻す。 と、ありますが、 とりあえずファイルのリストを作って、CreateFileでハンドルを取得していき、WriteFileでファイルを作っていくと言う過程かな・・・? と思いました。 しかし、制作したファイルをどう復元するのかが思いつきません。 制作したファイルハンドルをCreateFileで取得し、 ReadFileで読み込んでいって、もう一度WriteFileで復元していく・・・ と言う方法なら思いつきましたが、ReadFileで読み込むバイト数はどうすればいいのでしょうか。 最初は、適当にテキストファイルでも作って一緒にまとめて、後から取り出したらいいや・・・ と考えましたが、どっちにしろ、そのテキストファイルのバイト数が分かっていないといけません。 hiro_knigh様はどうお考えなのでしょうか よろしければ教えてください。