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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Ma

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

#1

投稿記事 by Ma » 16年前

・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 が増えているのがわかります。

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

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

Ma

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

#2

投稿記事 by Ma » 16年前

*追記です。
違うファイルも比較してみました。今回は、テキストファイルをコピーしてみました。
なんだか、定期的にずれがあって、もどって、、、って感じです。

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

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

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


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

GPGA

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

#3

投稿記事 by GPGA » 16年前

テキスト形式で出力されているからです。

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

GPGA

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

#4

投稿記事 by GPGA » 16年前

間違えた
× io::out | io::binary
○ ios::out | ios::binary

Ma

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

#5

投稿記事 by Ma » 16年前

直りました!
ありがとうございました。
たしかに、バイナリで出力しないといけませんね・・・。
見落としていました。

閉鎖

“C言語何でも質問掲示板” へ戻る