【先着1,000名様!】1,000円分をプレゼント!

WindowsのAPIの動きについての質問です。

ファイルをコピー・移動するときや外部に送信する際に
CreateFileを呼び出しているようなんですが、これは
一度ファイルをオープンしてからコピーなり送信なりの
操作を行っているということなんででしょうか?
CreateFileという関数については、ファイルの作成・開く
という動作をするものとしてしか認識してないので
内部の動きがよく分からないのです。

ちなみにCreateFileの説明はこちらです。
http://msdn.microsoft.com/library/ja/default.asp …

どなたか詳しい方、ご教授願います。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

★『CreateFile』について


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

rurararaさんも紹介されているMSDNにも記載されていますが、


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

この回答への補足

回答ありがとうございます。

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

補足日時:2007/01/28 23:38
    • good
    • 0

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


人気Q&Aランキング