0

fstreamを使用してファイルに書き込むには、助けが必要でした。現在、fwrite メソッドを使用して書き込むことができます。しかし、fwriteを使用してデータ型をキャストし、それを使用して書き込みたいと思いました

以下は私がこれまで行っていることです:

noOfRows = 700;
noOfCols = 100
array[0] = unsigned char [noOfRows * noOfCols]

fstream fstreamFile;
fstreamFile.open ("fstreamFile.txt", fstream::out);

for(int i = 0; i < noOfRows; i++ )
{
fwrite(array[0]+(i*noOfRows), sizeOf(unsigned char), noOfCols, fwriteFile); // writes ok
fstreamFile.write((char*) array[0]+(i*noOfCols), sizeof(unsigned char)); // doesn't write
}

誰かが私が間違っていることを教えてもらえますか? コンパイルエラーは発生しません。ファイルは書き込まれていません(事前に作成しました)。

4

3 に答える 3

2

2つのこと、ファイルの正しい場所を探していますか?作業ディレクトリがある場所ならどこにでもあるはずです。事前にファイルを作成する必要はありません。作成されます。次に、ファイルが作成されていることを確認します。これは次の方法で実行できます。

if (!fstreamFile) { cout << "errorr.." << endl; }
于 2012-06-22T20:07:12.383 に答える
1

(char*) array[0]+(i*noOfCols)

これは、位置0にある配列の値を取得し、その値をchar *(ランダムなジブリッシュポインターを指定して)にキャストし、それに追加i * noOfColsします。私はこれがあなたが望むものかもしれないと信じています:

(char*) (&array[0]+(i*noOfCols))

ただし、スタイル的には、代わりにC++キャストを使用することをお勧めします。

reinterpret_cast<char *>(& array[0] + i * noOfCols)

また、もう少し一般的にするために、sizeof(unsigned char)を使用する代わりに、をお勧めします。sizeof(array[0])

また、1次元配列で2次元配列をシミュレートしようとしているようです。unsigned char array [noOfRows][noOfCols];配列をとして宣言してから、通常どおり2次元で操作する方がはるかに簡単です。あなたの方法ではパフォーマンスが得られません。

于 2012-06-23T00:42:22.363 に答える
1

キャストを避けるために iostream を使用する傾向があります。

unsigned char の配列を指定すると、代わりにアルゴリズムとイテレータを使用してファイルを書き込むことができます。

#include <fstream>
#include <algorithm>
#include <iterator>

// your main and array declaration here

ofstream fstreamFile("fstreamFile.txt");
copy(
    array,
    array + sizeof(array),
    ostream_iterator<unsigned char>(fstreamFile)
);
于 2012-06-22T21:34:28.830 に答える