0

ファイルから任意のプリミティブ データ型を読み書きできるようにする必要がある C++ の Random Access File クラスでの作業に問題があります。ただし、コードがコンパイルおよび実行されても、ファイルには何も書き込まれません。

ファイルはコンストラクターでオープンエンドです:

RandomAccessFile::RandomAccessFile(const string& fileName) : m_fileName(fileName) {
// try to open file for reading and writing
m_file.open(fileName.c_str(), ios::in|ios::out|ios::binary);
if (!m_file) {
    // file doesn't exist
    m_file.clear();
    // create new file
    m_file.open(fileName.c_str(), ios::out | ios::binary);
    m_file.close();

    // try to open file for reading and writing
    m_file.open(fileName.c_str(), ios::in|ios::out|ios::binary);
    if (!m_file) {
        m_file.setf(ios::failbit);
    }
}

}

main で関数の呼び出しをテストします。

RandomAccessFile raf("C:\Temp\Vec.txt");
char c = 'c';
raf.write(c);

書き込み機能:

template<class T> 
void RandomAccessFile::write(const T& data, streampos pos) {
if (m_file.fail()) {
    throw new IOException("Could not open file");
}

if (pos > 0) {
    m_file.seekp(pos);
}
else {
    m_file.seekp(0);
}

streamsize dataTypeSize = sizeof(T);
char *buffer = new char[dataTypeSize];
for (int i = 0; i < dataTypeSize; i++) {
    buffer[dataTypeSize - 1 - i] = (data >> (i * 8));
}
m_file.write(buffer, dataTypeSize);
delete[] buffer;

}

デバッグすると、ファイルに書き込まれたときに「c」がバッファにあることがはっきりとわかります。助言がありますか?

ありがとうフィル

4

1 に答える 1

0

少しの運でそれを自分で解決しました。どうやら、 fstream.open は絶対パスでは機能しません。「C.\temp\vec.txt」を「temp」だけに置き換えると解決しました。

于 2013-01-24T17:45:20.387 に答える