• ベストアンサー

APIの動きについて

WindowsのAPIの動きについての質問です。 ファイルをコピー・移動するときや外部に送信する際に CreateFileを呼び出しているようなんですが、これは 一度ファイルをオープンしてからコピーなり送信なりの 操作を行っているということなんででしょうか? CreateFileという関数については、ファイルの作成・開く という動作をするものとしてしか認識してないので 内部の動きがよく分からないのです。 ちなみにCreateFileの説明はこちらです。 http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpfileio/html/_win32_createfile.asp どなたか詳しい方、ご教授願います。

質問者が選んだベストアンサー

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

★『CreateFile』について ・この関数はファイルを新規作成する以外に、ファイルの内容を読み書きするときに必ず最初に  呼び出します。そして、この関数でファイルをアクセスするための『ハンドル』=オブジェクト  を戻り値で返します。以後、このハンドルを利用してファイルサイズ、属性、コピーなどの  さまざまな操作を行い、ファイル操作の最後に『CloseHandle』でハンドルを閉じます。 ・しかし、ファイルの移動はドライブが違うときはコピー処理になるため、『CreateFile』で  『オープン』→『内容を別ドライブへ転送』→『クローズ』という処理を行いますが、同一の  ドライブの移動は『パス名』のリネームによってファイルが移動するので『CreateFile』での  『オープン』処理は行いません。 ・また、『CreateFile』はファイル以外にも多数のデバイスを操作できます。→この辺の説明は  回答者 No.1 さんが説明していますね。 ・よって、『CreateFile』関数はファイル操作を行うための『ハンドル』を取得する関数です。 ・以上。おわり。

その他の回答 (1)

  • rinta44
  • ベストアンサー率69% (30/43)
回答No.1

rurararaさんも紹介されているMSDNにも記載されていますが、 パラメータにdwCreationDisposition()を使用してCREATE_NEWや CREATE_ALWAYSといった値などを指定した場合には新規にファイルを作 成したりもしますが、基本的に、CreateFile()は、下記のオブジェクト にアクセス可能(オブジェクトのハンドル値を返す)な状態にする為に呼 び出されます。 つまり、オブジェクトを作成するか開いてアクセスするために利用でき るハンドルを返すという動作です。 ・コンソール ・通信リソース ・ディレクトリ(開くだけで作成は不可能) ・ディスクデバイス(Windows NT/2000 のみ) ・ファイル ・メールスロット ・名前付きパイプ ゆえに、コピーや移動をする場合にはCopyFileEx()やMoveFileEx()が呼 び出されたりします。勿論、両関数だけが呼び出されて動作するわけで はありませんが。

rurarara
質問者

補足

回答ありがとうございます。 なるほど。 ではCreateFileはコピーや移動の際にはオブジェクトのハンドルを 取得するために呼び出されるということなんですね。 調べてみたところ、ファイルを外部に送信する際などでもCreateFileが 呼びだされるようですが、これも一度ファイルにアクセスして ファイルのハンドルを取得するために呼び出されているのですね。 この認識で合ってますでしょうか。

関連するQ&A