这是我第一次接触C ++。我必须制作一个程序,它将监视一个.txt或.doc文件,并从中读取每个新的(最后一个)条目(单词)。我现在能够做的事情是完全读取txt文件,但这不是重点,我甚至不能从txt文件中得到最后一个字,所以我非常感谢你对此的帮助。
提前谢谢大家!!!
答案 0 :(得分:0)
不确定这是否是家庭作业,以防万一我试图通过“告诉太多”来避免破坏它,而是指出你可以使用的关键想法。
为避免读取整个文件,您可以先使用seekg方法将文件从末尾定位一定数量的字节,然后从那里执行“读到最后一个字”。
要正确执行“读到最后一个单词”任务(除了优先不一次读取整个文件的一个单词,请参见第一段)使用>>运算符和{{ 1}}作为左操作数,std::ifstream
作为右操作数:只需将其放在std::string
中,这样它就会继续读取,直到它有最后一个字。
while(!thestream.eof()) { ... }
文件中的文本比从文本文件中读取文本要难得多,除非您可以使用合适的“.doc读取库”(标准C ++库)本身没有这样的功能。
答案 1 :(得分:0)
从C ++中读取MS Word是一项繁琐的工作;你需要解决混乱的COM接口。既然你说它是你第一次接触C ++,我的建议是专注于纯文本,即获取纯文本文件的最后一行。
我会做这样的事情。提供ReadFromEnd和FindRightmostLineSeparator的实现,它们应该是微不足道的,并初始化fileSize变量。
int const INITIAL_BUFFER_SIZE = 64;
int bufferSize = INITIAL_BUFFER_SIZE;
char* lastLine = NULL;
std::auto_ptr<char> buffer (new char[buffer_size]);
while(true) {
ReadFromEnd(buffer, buffer_size);
lastLine = FindRightmostLineSeparator(buffer);
if (lastLine == NULL && bufferSize == fileSize)
lastLine = buffer;
if (lastLine)
break;
buffer_size *= 2;
if (buffer_size > fileSize)
bufferSize = fileSize;
buffer.reset(new char[buffer_size]);
}
// lastLine contains the pointer to your last line