• 締切済み

C、C++でアーカイバ(ツール)作成

現在「Winマシンで動くアーカイブツール」の作成をしようと思っているのですが、まずどういうことから勉強したらいいのか路頭に迷っています。 具体的には、 ・Windows上で複数のファイルを1つのファイルとしてまとめることができるツール(元に戻すこともできる) ・GUIベースで動く ・圧縮機能は(現在は)いらない という内容です。 とりあえずツールを作る練習とういう形で、複雑なものではなくボタンを押すだけでファイルが1つになる、といったような単純なものを目指しています。 プログラムは初心者でC、C++の初歩的な部分は一通り押さえているつもりですが、具体的にツールとして物を作るのはこれが初めてなのでどういったところから勉強していくと良いでしょうか。 ネットで調べたところでは、GUIベースでのツール作成ということでとりあえずWindowsプログラミングやMFCなどを現在は勉強しているのですが、肝心の「複数のファイルを1つのファイルにする」という点で困っています。 「アーカイバ」辺りをキーワードに探しているのですが圧縮関係の複雑な情報ばかりなもので・・・^^ 開発環境はVC++2005です。 色々と足りない部分もあるかもしれませんが、ご助言いただけたら幸いです。参考になりそうな本やサイトなどもありましたら、是非紹介いていただけたらと思っています。 どうぞよろしくお願い致します。

みんなの回答

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.4

1つにするというよりは、1つにした後どうやって戻すかを考えれば 1つにするときどんな情報が必要なのかがわかると思います。 ・いくつのファイルが格納されているのか。 ・個々のファイルのサイズはいくつなのか。 ・個々のファイル名は何なのか。(どこに格納されているのか) ・そのファイルは1つになったときそのファイルはどの位置にくるのか。 このくらいあれば、最低限は出来そう。 図付きでわかり易い「すきやき」さんところでも貼っておきます。 http://www.c3.club.kyutech.ac.jp/gamewiki/index.php?%A5%D5%A5%A1%A5%A4%A5%EB%A5%D1%A5%C3%A5%AD%A5%F3%A5%B0

huwaxl623
質問者

お礼

どうもありがとうございます! 紹介いただいたリンク先も拝見させていただきました。 図解とサンプルもあってとても勉強になります。 本当にありがとうございます。

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.3

簡単な原理は systemのファイル管理を参考にしてみよう。 http://www.google.co.jp/search?hl=ja&lr=lang_ja&q=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E7%AE%A1%E7%90%86%20%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%82%A8%E3%83%B3%E3%83%88%E3%83%AA 学校での学級での生徒名簿を学年に纏める場合も学級の名簿を1単位にして同じ考えで纏めるのとあまり変らない。 C言語でも文字列は終端記号が設定されているけれどそれはテキストである場合でバイナリファイルを読む場合は別途長さを記録してるよね? 同じ考えが用いられる。 つまり、アーカイブしたファイルがどのくらいの大きさを持っていてどこに入っているかというのを記録しておけば取り出しができると思う。 格納する場合はテキストの追加更新と同じ考えを行えば良い。 できそう?

huwaxl623
質問者

お礼

ご助言ありがとうございます。 つまるところデータそのものに加えてデータのサイズの情報も同時に記録してある形式のファイルを作ればよいという考え方という解釈でよろしいでしょうか。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス >とりあえずツールを作る練習とういう形で、複雑なものではなくボタンを >押すだけでファイルが1つになる、といったような単純なものを目指しています。  ↑  それなら最初はコマンド・プロンプト上で動くものを作ってみてはどうでしょうか。 >「複数のファイルを1つのファイルにする」という点で困っています。  ↑  単純に複数のファイルを合併して1つのファイルにすれば良いです。  ただし1つ1つのファイルのサイズ、作成日時、更新日時、アクセス日時、属性などの情報を  合併したファイルのヘッダ部に記録します。 ・圧縮機能は必要ないという事なので純粋な『アーカイバ』ですね。  基本的に複数のファイルを合併して1つのバイナリファイルを作成します。  ヘッダ部もどのように管理するかは自由ですがぱっと考えて2通りあります。  (1)合併ファイルの先頭に全ファイルのインデックス情報を記録する方式  (2)合併ファイルの先頭にアーカイバ識別文字列とファイル数を記録して   1つ目のファイル情報、ファイル内容   2つ目のファイル情報、ファイル内容   3つ目のファイル情報、ファイル内容    :   最後のファイル情報、ファイル内容   という感じで記録する方式 ・(1)はちょうどディスク管理の FAT と同じような感じで管理する方法です。  (2)は lzh、zip と同じような管理方法です。  お勧めは(2)です。  理由は可変長でデータを管理できるので追加、削除が簡単です。  下に(2)の方式のファイル構造のイメージを載せます。 イメージ: +------------------+ |アーカイバ識別文字列| ←自分で決める(ビットマップでは『BM』にあたる文字列) +------------------+ |その他のヘッダ情報| ←アーカイバを管理する上で必要な情報(個数、パスワードなど) +----------+----------+ |ファイル情報|ファイル内容| +----------+----------+ |ファイル情報|ファイル内容| +----------+----------+ |ファイル情報|ファイル内容| +----------+----------+      : +----------+----------+ |ファイル情報|ファイル内容| +----------+----------+ 解説: ・上記のファイル情報には  (1)ファイルのサイズ  (2)ファイルの作成日時  (3)ファイルの更新日時  (4)ファイルのアクセス日時  (5)ファイルの属性  (6)ファイルのCRC32  (7)ファイルのパス情報  (8)その他(付加情報)  などを1つの構造体データとして管理すれば良いです。 ・アーカイバの作成は  (1)指定のファイル検索  (2)1つのファイル情報の取得  (3)1つのファイル内容のCRC32計算  (4)fopen、fclose でファイル情報、ファイル内容を1つの合併ファイルに書き込む ・アーカイバの復元は  (1)合併ファイルのヘッダ情報、ファイル情報を辿り復元したいファイルを探す  (2)復元したいファイルの先頭位置を fseek で移動、ファイルサイズ分を取り出す  (3)復元したファイルのファイル情報を再設定する(日時、属性など) ・以上。参考にして下さい。

huwaxl623
質問者

お礼

ありがとうございます。 (1)のやり方(2)のやり方共に、独自のファイル形式で1つのファイルにまとめるという方法があるんですね。 ファイルの操作のプログラムは勉強不足な部分でもあるので、イメージと解説もご親切に書いて頂き非常に参考になります。 丁度良い勉強になりそうです。 本当にありがとうございます!頑張ってみます。

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

>肝心の「複数のファイルを1つのファイルにする」という点で困っています。 他の似たようなソフトを参考にするんだ。例えば tar とか。 それか アーカイバプロジェクトから dll をひろってきて、アプリケーション側ではそれを利用するだけ。とか。

参考URL:
http://www.csdinc.co.jp/archiver/
huwaxl623
質問者

お礼

ありがとうございます。 色々と調べましたところtarやzipの非圧縮などがそれにあたるようですね。 なるほど、既存のdllを使用するという手はとても懸命な気がしますが今回は練習というか勉強のために自分で一から作ってみるように心がけてみようかとも思っています。 参考URLもありがとうございました。

関連するQ&A

  • バッチファイルから呼び出し可能なアーカイバを探しています

    お世話になっております。タイトルの通りなのですが、 バッチファイルから呼び出し可能なアーカイバを探しています。 動作条件としては、以下の通りです。 1.Windows-NTで動作すること 2.Zip形式の圧縮ファイルが作成できること 3.バッチファイルから呼び出し可能なこと(DOSプロンプトから実行可能なこと) PKZIPが該当するかと思ったのですが、マニュアルをざっとみたところ、WindowsのGUIで操作することはできても、バッチファイルから呼び出して、使用できるとは、記述されておりませんでした。 上記の条件に合致するアーカイバをご存じのかたいらしたら、教えていただけませんでしょうか。 (バッチから呼び出し可能なPKZIPであれば、申し分ありません)

  • C言語で自作GUIツールキットを作成したい

    こんにちは。 初めて、C言語でGUIツールキットを自作したいと考えております。 目的としては、どうやってGTK+などのGUIツールキットは画面にウィンドウやボタンといったものが表示しているのか学習をしたいためです。 最初は、GUIツールのソースをみて解釈しようとしたのですが、C言語自体が独学なので意図が読み取れなかったり、どこで画面を作成しているのか分からず挫折をしてしまいました。 ですので、わかりやすい書籍やWebページがありましたら教えてください。

  • Unicode文字に対応したアーカイバを探しています。

     ファイル名にハングルやタイ語が入っていると、通常のアーカイバでは圧縮できなかったり、解凍できなかったりします。  7-Zipなどもメニュー表示が諸外国語化できるだけで、ファイル名に上記文字が入ると正しく操作できませんでした。  Windowsは各国版があるので必ず対応アーカイバがあると思っていますが探せません(ないと、その国(の言語)では圧縮操作ができないことになる…)。  ぜひ教えてくださいm(__)m。

  • WebAPIを用いたツールの作成について

    はじめまして。 公開されている様々なWebAPIを用いてツールを作成したいと思い、自力で勉強しようと思ったのですが、何から手を付けていいのやらわからず質問させて頂きました。 例としてはGoogleAdWordsのAPIを用いて管理ツールのようなものが出来ないか?とか・・・SEMを総合してする管理ツール(オーバーチュア、アドワーズを一括管理したい)やアフィリエイトの各ASPを一括で管理するツールなどの作成を行いたいと思っています。 ちなみに個人的に使用したいと思っているため、完璧なものは求めていません。 これまで、C、C++、Javaを用いて組み込みソフト開発の経験がありますが、システム、アプリなどの開発の経験は全くありません。 ですので、GUIなどの作成も???状態でして・・・。 このような状態でツールの作成は、まず土台無理なことなのでしょうか? それとも何らかの勉強をすれば出来るものなのでしょうか。 短期間であれば、学校などに通うことも視野に入れ、色々と探してみたのですが、どういうところに行けば良いのかもわからず途方に暮れています。 ご教授のほど、宜しくお願い致します。

  • C++とC#を使ったアプリケーション作成

    アプリケーションと言って良いのかは微妙なのですが、アプリケーションを作ることになりました。 既存のいくつかのプログラムを1つにまとめて、GUIで操作できるようにするのが最終目的です。 もとのプログラムはC++で書かれています。 今回は、GUIの部分を 「Microsoft Expression Blend 2」でデザインしようと考えているのですが、 GUIの部分をC#で作成し、メインの処理をC++で書くことは可能なのでしょうか? それとも、メインの処理をC#で書き直すことが必要でしょうか? 知恵を貸してください。 よろしくお願いします!!

  • 自己解凍ファイルを作成できるFDイメージファイル作成ツール

    自己解凍ファイルを作成できるFDイメージファイル作成ツール(WIN用)ありませんか? イントラネット内で各種起動用FDをウェブサーバを通じて配布しております。 (FD⇒イメージファイル化⇒圧縮⇒配布) ユーザーにはできるだけ手間をかけさせたくないので、 復元にはツールを必要としない自己解凍形式にしたいのですが、よいツールが見つかりません。 現在は、DCU.COM をイメージファイルと一緒に圧縮し、「解凍後実行コマンド」に イメージファイル復元のためのコマンドを書き、自己解凍ファイルを作成することで ユーザーはワンクリックで起動FDを作成できるようにしています。 作成が非常に面倒な上に、また、DCU.COM はDOSアプリのためNTでは動作しません。 よいツールがありましたらお教え願います。 /* DCU.COM ( Camel氏 :DOSフリー )FDのイメージファイル作成/復元ツール LHMelt ( Micco氏 :WINフリー )圧縮/解凍ツール */

  • インストーラー作成ツールについて

    インストーラー作成ツールについて 無料のインストーラー作成ツールを探していますが、 下記機能を盛り込み作成できるツールはありますでしょうか? 1.C:\aaa.exe実行 2.C:\1\bbb.exe実行 3.C:\2\ccc.exe実行 1.2.3を順番に実行するインストーラーは作成可能ですかね。 またあるファイルをコピーし、ショートカットをデスクトップに作成する インストーラーも探しています。 どなたかご教授願います<(_ _)>

  • こんな圧縮ツールありますか?

    手持ちの大量のファイルをzip圧縮したいのですが、今使ってるラプラスでは複数のファイルを一度に圧縮しようとすると1個のzipファイル内に全てのファイルが入って圧縮されてしまいます。 とはいえ一つづつ圧縮していくとかなり時間がかかってしまいます。選択した複数のファイルを個別で圧縮してくれるようなツールをご存知の方がいらっしゃればお教えください。 仕様OSはwin98seです。

  • C++でMIDIを作成するプログラム

    Windows XP、Visal C++でMIDIを作成するプログラムを作成しようと考えているプログラム初心者です。 1小節で1トラックだけ使ってるMIDIを前もって自分でたくさん作ってあり、そのMIDIファイルを使ってトラック1の1小節目、2小節目…に貼り付けていって、トラック2の1小節目、2小節目…と張り付けていって…という作業をして、新たに複数小節で複数トラックあるMIDIファイルを一つのMIDIファイルとして作成する、みたいなことをしたいんですが、そういうことはできるんでしょうか? と前に質問したところ、できると言われたのですが、具体的な方法とか、利用できそうな関数などないでしょうか?あれば教えていただきたいです。 本当にまだ未熟な初心者なもので調べてもわからない言葉が出てくるばかりで一向に進まず困っています。

  • ステップカウントツールが作成したいんですが・・・。

    C++言語で、読み込んだcppファイルのステップ数をカウントするツールを作成しているんですが、 複数行にまたがるブロックコメント行や、関数ごとのカウントなどがうまくいきません。 表示したいのは総ステップ、関数ごとの実ステップ、コメントステップ、その他(空白行や#include文など)です。 仕様はおおまかに以下になります。 ・コメント行とはC/C++のコメントで、//で始まる行コメントと、  複数行にまたがる/*~*/ブロックコメントのどちらも認識する。 ・非コメントとコメントが1行にある場合、その一文が関数内にある場合は  実ステップとしてカウントします。(a++ ;/* インクリメント */などの場合) 現在は"//"や"/*"や"*/"や"{"や"}"などの文字を検索し、それぞれが 見つかった場合ごとに処理を分けて考えていますが、関数の中に書かれているのか そうでないのかや、ブロックコメントなのかなど、複雑な条件がからんでいるので 正直、どういうプログラムになるのかわからず、混乱している状況です。 どのように組んでいけばいいでしょうか。よろしくお願いいたします。

専門家に質問してみよう