File io 文件流读取和写入文本文件,然后在c++;
我试图做的是相当基本的,但我有我的项目的麻烦。我的项目太大,无法包含所有内容,因此我将只包含我正在编写的两个函数以及txt文件的外观。这是C++的。p> bookmark.cfgFile 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 这是我写和读文本文件的两个函数和我的类的私有
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