
WindowsのAPIの動きについての質問です。
ファイルをコピー・移動するときや外部に送信する際に
CreateFileを呼び出しているようなんですが、これは
一度ファイルをオープンしてからコピーなり送信なりの
操作を行っているということなんででしょうか?
CreateFileという関数については、ファイルの作成・開く
という動作をするものとしてしか認識してないので
内部の動きがよく分からないのです。
ちなみにCreateFileの説明はこちらです。
http://msdn.microsoft.com/library/ja/default.asp …
どなたか詳しい方、ご教授願います。
No.2ベストアンサー
- 回答日時:
★『CreateFile』について
・この関数はファイルを新規作成する以外に、ファイルの内容を読み書きするときに必ず最初に
呼び出します。そして、この関数でファイルをアクセスするための『ハンドル』=オブジェクト
を戻り値で返します。以後、このハンドルを利用してファイルサイズ、属性、コピーなどの
さまざまな操作を行い、ファイル操作の最後に『CloseHandle』でハンドルを閉じます。
・しかし、ファイルの移動はドライブが違うときはコピー処理になるため、『CreateFile』で
『オープン』→『内容を別ドライブへ転送』→『クローズ』という処理を行いますが、同一の
ドライブの移動は『パス名』のリネームによってファイルが移動するので『CreateFile』での
『オープン』処理は行いません。
・また、『CreateFile』はファイル以外にも多数のデバイスを操作できます。→この辺の説明は
回答者 No.1 さんが説明していますね。
・よって、『CreateFile』関数はファイル操作を行うための『ハンドル』を取得する関数です。
・以上。おわり。
No.1
- 回答日時:
rurararaさんも紹介されているMSDNにも記載されていますが、
パラメータにdwCreationDisposition()を使用してCREATE_NEWや
CREATE_ALWAYSといった値などを指定した場合には新規にファイルを作
成したりもしますが、基本的に、CreateFile()は、下記のオブジェクト
にアクセス可能(オブジェクトのハンドル値を返す)な状態にする為に呼
び出されます。
つまり、オブジェクトを作成するか開いてアクセスするために利用でき
るハンドルを返すという動作です。
・コンソール
・通信リソース
・ディレクトリ(開くだけで作成は不可能)
・ディスクデバイス(Windows NT/2000 のみ)
・ファイル
・メールスロット
・名前付きパイプ
ゆえに、コピーや移動をする場合にはCopyFileEx()やMoveFileEx()が呼
び出されたりします。勿論、両関数だけが呼び出されて動作するわけで
はありませんが。
この回答への補足
回答ありがとうございます。
なるほど。
ではCreateFileはコピーや移動の際にはオブジェクトのハンドルを
取得するために呼び出されるということなんですね。
調べてみたところ、ファイルを外部に送信する際などでもCreateFileが
呼びだされるようですが、これも一度ファイルにアクセスして
ファイルのハンドルを取得するために呼び出されているのですね。
この認識で合ってますでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するQ&A
- 1 Windows Server 2016のユーザープロファイル移動後も継続してプロファイルを使用したい
- 2 Windowsバッチファイルで、隠しファイルを移動したいのですが、何か特別な設定が必要ですか?
- 3 コピー先とコピー元で更新時刻が異なるファイルだけコピーしたい
- 4 win10 C:\Windows\System32\configのファイルをコピーするには
- 5 ファイル移動時に「ファイル'***.ISO'は大きすぎて、対象のファイルシステムに入りません。」
- 6 Windows 10のデスクトップに並ぶファイル・フォルダ・アイコンの表示や並べ替えについて。
- 7 windows APIのフリーコンパイラ
- 8 リモートPC自身でファイル・コピーをさせる
- 9 フォルダ・ファイルを強制移動する方法。
- 10 移動ユーザプロファイルで質問
関連するカテゴリからQ&Aを探す
おすすめ情報
人気Q&Aランキング
-
4
SDカードからPCにコピーできない。
-
5
ファイル名が長すぎる場合のコ...
-
6
EXCELで、セル間隔をあけて貼り...
-
7
大容量ファイルコピー時に「無...
-
8
エクセルが使用中に強制終了→読...
-
9
フリーソフトをCD-RやUSBメモリ...
-
10
WindowsImageBackupを移動したい
-
11
DVD-RAMの動画をHDDにコピーしたい
-
12
何故Windows8/8.1はクソやゴミ...
-
13
ヤフー 英語表記を直したい。
-
14
コピー、ベーストとありますが...
-
15
ワードのファイル間のページご...
-
16
勝手にファイルがコピーされた?
-
17
ファイル移動の速度が18MB/s~2...
-
18
フォルダ内のファイルの移動、...
-
19
巡回冗長検査(CRC)エラーでも無...
-
20
「指定されたファイル名は無効...
おすすめ情報