ページ 11

DXアーカイブ内からのファイルのコピー

Posted: 2009年8月11日(火) 09:04
by Ma
・visual studio 2008 Express Edition
・DXライブラリ

を用いています。

・やりたいこと
 DXアーカイブ内のファイルを、DXアーカイブ外にコピーしようとしています・

・やったこと
↓に作ったソースコードを示します。
void copyFromDXTo(string oldPath,string newPath){
	int fileSize = FileRead_size(oldPath.c_str());//DXアーカイブ内ファイルのサイズ所得
	int fileHandle = FileRead_open(oldPath.c_str());//DXアーカイブ内ファイルのハンドル取得

	char *buf = new char[fileSize];//バッファ作成
	FileRead_read( buf, fileSize, fileHandle);//読み込み
	FileRead_close(fileHandle);//閉じる

	ofstream ofs;//出力用意
	ofs.open(newPath.c_str());//開く
	ofs.write((const char*)buf ,sizeof(char)*fileSize);//バッファ書き込み
	ofs.close();//閉じる。

	int newFileSize = FileRead_size(newPath.c_str());
}
関数終了直前のローカルデータ
 ・fileSize 6012
 ・newFileSize 6013


・何が問題か
 DXアーカイブ内にある、コピー元のファイルと、コピー後のファイルが一致しません。
 どう一致しないかというと、新しいファイルが、なぜか1バイト増えています。
 しかも増えている場所が最初や最後ではなく、途中でです。
 画像を、ごらんになってください。
 バイナリエディタで比較したものです。
 途中で 0D が増えているのがわかります。

・どうやってチェックしたか
 コピー元がアーカイブなしのフォルダ構成で、確認しましたし、
 コピー元がアーカイブ後のフォルダ構成でも確認しました。
 なお、当然ですがコピー先は、アーカイブ化されていません。

これは、私のコーディングの間違いでしょうか?
それともライブラリに何か問題が・・・?

Re:DXアーカイブ内からのファイルのコピー

Posted: 2009年8月11日(火) 09:42
by Ma
*追記です。
違うファイルも比較してみました。今回は、テキストファイルをコピーしてみました。
なんだか、定期的にずれがあって、もどって、、、って感じです。

コピー元サイズ:10880
コピー後サイズ:11040
↑画像はこのファイルの比較です。

いつも
 0A の直前に0D が入っています。
 逆に 0D 0A があるところは、それが消えているように見えます。

結果、定期的に違いが発生しているのでしょう。
また、0A があるところは、改行があるところのようです。


また、変換後のテキストファイルを読み比べてみると違いはありません。
つまり、改行の文字コードが違う・・・のでしょうか?

Re:DXアーカイブ内からのファイルのコピー

Posted: 2009年8月11日(火) 10:17
by GPGA
テキスト形式で出力されているからです。

× ofs.open(newPath.c_str());
○ ofs.open(newPath.c_str(), io::out | io::binary);

Re:DXアーカイブ内からのファイルのコピー

Posted: 2009年8月11日(火) 10:18
by GPGA
間違えた
× io::out | io::binary
○ ios::out | ios::binary

Re:DXアーカイブ内からのファイルのコピー

Posted: 2009年8月11日(火) 10:22
by Ma
直りました!
ありがとうございました。
たしかに、バイナリで出力しないといけませんね・・・。
見落としていました。