C++ 无限循环读取文件创建重定向命令输出
c++ endless loop reading file created redirecting command output
我正在编写一段代码,在其中检查给定目录中是否有新文件或目录。在我的情况下,上次在该目录中运行代码时被视为新情况。因此,我创建了一个日志文件,然后在字符串向量中获取日志。代码如下:
ifstream Finp;
string directory;
vector <string> newfilelist;
system( ("ls -B "+directory+" > "+directory+"filelist.log").c_str() );
Finp.open( (directory+"filelist.log").c_str() );
while ( true ) {
string stmp;
Finp >> stmp;
if( Finp.eof() ) break;
newfilelist.push_back( stmp );
}
现在发生的事情如下:
1)如果日志"filelist.log"已经存在,则一切运行顺利
2)如果日志"filelist.log"不存在,则正确创建它,但是当代码打开文件并开始获取它时,它会卡在循环中,并且stmp字符串无限地为空(好像文件没有eof()但为空!有趣的是,如果我在打开日志之前放置一个随机的系统命令,一切都会顺利进行!
我错过了什么?
我认为
,您唯一需要更改的是令人讨厌的while(true)
循环while(file<< to_variable)
。这只会在有一些数据时读取数据。
eof()
实际上很有欺骗性。您会猜测它是在文件末尾调用的。虽然为 true,但当您尝试在 >>
操作中读取文件时,流中的指针将在EOF
之前跳回并尝试读取其中的内容。
线程只讨论EOF
并将其用作循环的条件。
如果文件不存在,Finp.open()
基本上会失败,检查Finp.eof()
是没有意义的。在尝试进入循环读取或检查 eof 之前,您需要使用 Finp.good()
检查Finp
状态,然后仅在此方法返回 true 时才继续读取。
相关文章:
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- C++编译器命令 C++ 不会生成输出
- 使用提升过程获取 shell 命令的标准输出
- cmake add_custom_command + Xcode:多输出 = 多命令调用
- gdb 中的列表命令不输出我编写的代码
- Windows 10命令提示符的输出不正确
- 如何在C++中执行命令并获取命令的返回代码标准输出和标准
- 获取使用p4api运行的Perforce命令的输出
- 在结束运行之前获取 c++ 中的 shell 命令输出
- 将 Tcl 中的命令输出重定向到文件时,文件以 DOS 格式生成
- 终端命令输出到 CPP 中的数组
- Valgrind 在主机名命令输出中显示内存泄漏
- C++ 无限循环读取文件创建重定向命令输出
- 如何在windows中的gcc中逐行读取命令输出,就像使用标准输入一样
- 微软nmake:是否可以从shell命令输出中定义宏
- GNU Make -在规则/目标中设置shell命令输出中的MAKEFILE变量
- nm 命令输出中的"@@"符号是什么意思?
- 无法理解核心文件分析的 GDB x 命令输出
- 如何将系统命令输出存储在变量中