古いVC++6.0のソースを修正することになりまして、わからないことが有りますので教え
てください。
あるハードディスク内のバイナリファイルをMOディスクへ分割してコピーするプログ
ラムがあります。MOディスクへコピーするときは約500KB(正確には1024*1024/2)ず
つコピーするようなプログラムになっているのですが、書き込み先ファイルを
CreateFile()で作成し、元ファイルを読み込むときは、fopenでファイルを開いていま
す。
あとはfread()でファイルを読み込み、WriteFileでファイルを出力しているようです。
この場合のWriteFileとはどういったメソッドなのかわかりません。
fwriteではだめなのか・・と思っています。
ご存じの方お教え願えないでしょうか。
CreateFile,WriteFileはWindowsのAPI、
fopen,fread,fwriteは標準Cライブラリの関数
です。
この2つは、全く関係ないものなので、
CreateFileでファイルを開いたならWriteFile等を
fopenで開いたならfwrite等を
使うべきでしょう。
実際には,fopen,fread,fwriteも内部でWindowsAPIを呼んでいるはずなので、
混在も無理やりにはできるのでしょうが。
そのソースの作成者がどのように考えて、2つを使い分けたのか正確には分かりませんが、
>MOディスクへコピーするときは約500KBコピー
するには、標準ライブラリより、細かい挙動が定義されているWindowsAPIを使ったのだと
思われます。
CreateFileのファイル名の指定はデバイス名ですか?
もし、そうであれば・・・
(1)CreateFile(MOデバイス)
使用するデバイス指定
(2)fopen(コピー元ファイル名)
コピー元ファイルオープン
(3)fread(コピー元ファイル名)
コピー元データ読み取り
(4)WriteFile(MOデバイス)
デバイスへ書き込み
というプログラムになってるのかな?って思いますが。
デバイスへのアクセスは、CreateFile/WriteFile/ReadFile・・・
ファイルへのアクセスは、fopen/fread/fwrite・・・
と使い分けているだけだと思います。
デバイスの書き込みは、WriteFileで可能ですが、fwriteではほぼ不可能です。
ただしfwriteで可能なことは、WriteFileでは、ほぼ可能です。
回答ありがとうございます。
WriteFileにてデバイスへの書き込みではなく、ファイルへの書き込みでした。
やりたいことは数百MBのバイナリファイルをMOドライブに分割して保存することで
す。
WindowsAPIについて調べてみます。