File io 文件流读取和写入文本文件,然后在c++;

File io 文件流读取和写入文本文件,然后在c++;,file-io,fstream,ifstream,ofstream,File Io,Fstream,Ifstream,Ofstream,我试图做的是相当基本的,但我有我的项目的麻烦。我的项目太大,无法包含所有内容,因此我将只包含我正在编写的两个函数以及txt文件的外观。这是C++的。p> bookmark.cfg No Title 0 0 0 0 0 0 No Title 1 1 1 1 1 1 No Title 2 2 2 2 2 2 No Title 3 3 3 3 3 3 No Title 4 4 4 4 4 4 No Title 5 5 5 5 5 5 这是我写和读文本文件的两个函数和我的类的私有

我试图做的是相当基本的,但我有我的项目的麻烦。我的项目太大,无法包含所有内容,因此我将只包含我正在编写的两个函数以及txt文件的外观。这是C++的。p> bookmark.cfg

No Title 
0 0 0 0 0 0

No Title 
1 1 1 1 1 1

No Title 
2 2 2 2 2 2

No Title 
3 3 3 3 3 3

No Title 
4 4 4 4 4 4

No Title 
5 5 5 5 5 5
这是我写和读文本文件的两个函数和我的类的私有结构

struct BookMark {
    std::string strFilename;
    unsigned id;
    unsigned bookID;
    unsigned chapterNumber;
    unsigned pageNumber;
    unsigned lineNumber;
    unsigned columnNumber;
}; // BookMark

// ----------------------------------------------------------------------------
// readConfigFile()
bool BookManager::readConfigFile() {
    using namespace std;

    // Just To Be Safe Incase This Function Is Called In Multiple Places
    _mBookMarks.clear();

    ifstream inFile( _strConfigFilename );
    if ( inFile.fail() ) {
        throw ExceptionHandler( __FUNCTION__ + std::string( " failed, could not open " )     + _strConfigFilename + std::string( " \nfor reading in book mark information \nInvalid file or file does not exist" ) );
    }

    // Read In The Book Mark Contents
    std::vector<BookMark> vBookMarks;
    BookMark bookMark;
    string tempString = "";

    if ( inFile.is_open() ) {
        while ( !inFile.eof() ) {
            BookMark bookMark;
            getline( inFile, bookMark.strFilename );
            inFile >> bookMark.id;
            inFile >> bookMark.bookID;
            inFile >> bookMark.chapterNumber;
            inFile >> bookMark.pageNumber;
            inFile >> bookMark.lineNumber;
            inFile >> bookMark.columnNumber;
            getline( iniFile, tempString );
            //_mBookMarks.insert( make_pair( bookMark.id, bookMark ) );
           vBookMarks.push_back( bookMark );
        }
    }

    inFile.close(); 

    return true;
} // readConfigFile



// ----------------------------------------------------------------------------
// writeConfigFile()
bool BookManager::writeConfigFile() {
    using namespace std;

    ofstream outFile;
    outFile.open( _strConfigFilename, fstream::out );
    if ( outFile.fail() ) {
        throw ExceptionHandler( __FUNCTION__ + std::string( " failed, could not open " )     + _strConfigFilename + std::string( " \nfor writing book mark contents to file." ) );
    }

    // Write Out Book Mark Contents
    if ( outFile.is_open() ) {
        unsigned i = 0;
        for ( i = 0; i < _mBookMarks.size(); i++ ) {
            outFile << _mBookMarks.at( i ).strFilename      << endl;
            outFile << _mBookMarks.at( i ).id               << " ";
            outFile << _mBookMarks.at( i ).bookID           << " ";
            outFile << _mBookMarks.at( i ).chapterNumber    << " "; 
            outFile << _mBookMarks.at( i ).pageNumber       << " ";
            outFile << _mBookMarks.at( i ).lineNumber       << " "; 
            outFile << _mBookMarks.at( i ).columnNumber     << endl << endl;            
        }
    }

    outFile.close();

    return true;
}  // writeConfigFile
struct书签{
std::字符串strFilename;
无符号id;
未签名的bookID;
未签名的chapterNumber;
无符号页码;
无符号行号;
无符号列号;
}; // 书签
// ----------------------------------------------------------------------------
//readConfigFile()
bool BookManager::readConfigFile(){
使用名称空间std;
//为了安全起见,此函数在多个位置被调用
_mBookMarks.clear();
ifstream infle(_strConfigFilename);
if(infle.fail()){
throw ExceptionHandler(\uuuuu函数\uuuu+std::string(“失败,无法打开”)+\uStrConfigFileName+std::string(\n用于读取图书标识信息\n无效文件或文件不存在”);
}
//在书中标出阅读内容
std::矢量vBookMarks;
书签书签;
字符串tempString=“”;
if(infle.is_open()){
而(!infle.eof()){
书签书签;
getline(inFile,bookMark.strFilename);
内嵌>>bookMark.id;
内嵌>>bookMark.bookID;
内嵌>>bookMark.chapterNumber;
内嵌>>bookMark.pageNumber;
内嵌>>bookMark.lineNumber;
内嵌>>bookMark.columnNumber;
getline(ini文件,tempString);
//_mBookMarks.insert(make_pair(bookMark.id,bookMark));
vBookMarks.向后推(书签);
}
}
infle.close();
返回true;
}//readConfigFile
// ----------------------------------------------------------------------------
//writeConfigFile()
bool BookManager::writeConfigFile(){
使用名称空间std;
出流孔的直径;
outFile.open(_strconfig文件名,fstream::out);
if(outFile.fail()){
throw ExceptionHandler(\uuuuu函数\uuuu+std::string(“失败,无法打开”)+\uStrConfigFileName+std::string(“\n用于将书本标记内容写入文件”);
}
//写出书标内容
if(outFile.is_open()){
无符号i=0;
对于(i=0;i<_mBookMarks.size();i++){

outFile我相信我已经解决了自己的问题。在我的read方法中,我必须添加第二个getline(这个fileStream,tempString);现在,我的代码似乎工作正常。我的向量值正确,只有5个元素,现在已脱离循环。

请指出编写此代码的语言。从write函数的外观来看,您可以在每个书签结构之间书写和空行,但您不必考虑其中的空行ad方法我知道你在说什么,我用一个临时字符串尝试了这个方法,并使用了getline(这个文件流,临时字符串),得到了相同的结果。我刚刚编辑了我的原始文章,在每次结构读取后为换行添加临时字符串。为了让你知道,我正在使用windows 7和visual studio 2012