古いソースを修正してわからないことがありまして

[戻る]
パッパラー [E-Mail] 2003/10/22(水) 01:04:23
古いVC++6.0のソースを修正することになりまして、わからないことが有りますので教え
てください。
あるハードディスク内のバイナリファイルをMOディスクへ分割してコピーするプログ
ラムがあります。MOディスクへコピーするときは約500KB(正確には1024*1024/2)ず
つコピーするようなプログラムになっているのですが、書き込み先ファイルを
CreateFile()で作成し、元ファイルを読み込むときは、fopenでファイルを開いていま
す。
あとはfread()でファイルを読み込み、WriteFileでファイルを出力しているようです。
この場合のWriteFileとはどういったメソッドなのかわかりません。
fwriteではだめなのか・・と思っています。

ご存じの方お教え願えないでしょうか。

team3 2003/10/22(水) 01:29:46
CreateFile,WriteFileはWindowsのAPI、
fopen,fread,fwriteは標準Cライブラリの関数
です。
この2つは、全く関係ないものなので、
CreateFileでファイルを開いたならWriteFile等を
fopenで開いたならfwrite等を
使うべきでしょう。
実際には,fopen,fread,fwriteも内部でWindowsAPIを呼んでいるはずなので、
混在も無理やりにはできるのでしょうが。

そのソースの作成者がどのように考えて、2つを使い分けたのか正確には分かりませんが、
>MOディスクへコピーするときは約500KBコピー
するには、標準ライブラリより、細かい挙動が定義されているWindowsAPIを使ったのだと
思われます。

ライオン 2003/10/22(水) 14:04:12
CreateFileのファイル名の指定はデバイス名ですか?
もし、そうであれば・・・

(1)CreateFile(MOデバイス)
   使用するデバイス指定

(2)fopen(コピー元ファイル名)
   コピー元ファイルオープン

(3)fread(コピー元ファイル名)
   コピー元データ読み取り

(4)WriteFile(MOデバイス)
   デバイスへ書き込み

というプログラムになってるのかな?って思いますが。

デバイスへのアクセスは、CreateFile/WriteFile/ReadFile・・・
ファイルへのアクセスは、fopen/fread/fwrite・・・
と使い分けているだけだと思います。

デバイスの書き込みは、WriteFileで可能ですが、fwriteではほぼ不可能です。
ただしfwriteで可能なことは、WriteFileでは、ほぼ可能です。

パッパラー [E-Mail] 2003/10/25(土) 12:01:44
回答ありがとうございます。

WriteFileにてデバイスへの書き込みではなく、ファイルへの書き込みでした。


やりたいことは数百MBのバイナリファイルをMOドライブに分割して保存することで
す。
 WindowsAPIについて調べてみます。

古いスレッドには追加発言できません。