函数 system() 中的输出重定向似乎不起作用
output redirection in the function system() seems not to work
我一直在为这个问题挠头,通过上网也找不到任何答案。
问题是我在程序中调用system("csvtojson someFile.csv 1> someOtherFile.json")
来生成 JSON 文件。在这一行之后,我想打开、读取和处理 JSON 文件。虽然,我可以看到文件已创建,但fopen()
返回NULL
.我读到system()
是同步的,所以我认为在system
调用完成之前,我的程序的其余部分不会被执行,因此将创建文件。
我怀疑这个问题与使用"1>"重定向输出流有关; 不过不确定。
任何帮助或提示将不胜感激。
谢谢! :)
附言我不想使用库将 csv 转换为 JSON,并且我无法在程序外执行转换,因为有大量非常大的 csv 文件,对我来说唯一的方法是将每个文件转换为程序内的 JSON 文件,运行我的算法,然后移动到下一个 csv 文件(将其转换为 JSON 并将其保存在同一个 JSON 文件中)。所以总的来说,我只有一个 JSON 文件,就像我的 csv 文件的缓冲区。话虽如此,如果有人有更好的设计方法可以快速实现,那也很棒。
更新:显示问题的实际代码,从OP的答案中复制:
int main(){
system("csvtojson Test_Trace.csv 1> ~/Traces/Test_Trace.json");
FILE* traceFile = fopen("~/Traces/Test_Trace.json", "r");
if(traceFile == NULL)
perror("Error in Openning the trace file");
else
cout << "Successfull openning of the trace file!" << endl;
return 0;
}
谢谢你们的回答。我必须在我的问题中更详细,因为问题似乎在我的问题中不清楚的地方。
我想出了问题所在,并想在这里分享(不是一个超级有趣的发现,但值得一提)。
我写了一个简单的程序来查找问题:
int main(){
system("csvtojson Test_Trace.csv 1> ~/Traces/Test_Trace.json");
FILE* traceFile = fopen("~/Traces/Test_Trace.json", "r");
if(traceFile == NULL)
perror("Error in Openning the trace file");
else
cout << "Successfull openning of the trace file!" << endl;
return 0;
}
如果你运行这个程序,你会得到错误消息No such file or directory
,但是如果你在system(...)
和fopen(...)
调用中用绝对位置替换地址字符串,即/home/USER_ID/Traces/Test_Trace.json
,你的代码将正常工作。有趣的是,我自己怀疑这可能是问题所在,我只更改了一个system(...)
但它仍然不起作用(尽管该文件是在传递给fopen(...)
的位置创建的)。
编辑:多亏了@Peter的评论,这个问题是因为system()调用会处理~
,但fopen()不需要并且需要一个绝对路径。因此,实际上没有必要为这两个函数提供绝对路径。
无论如何
再次感谢。:)
造成这种情况的原因可能是,当程序继续执行下一个指令时,系统命令尚未完成执行,它尝试从尚未创建的文件读取。
虽然这不是最好的方法,但短暂的停顿可能会有所作为,或者至少让你知道这是否是问题所在。
- 我的神经网络不起作用 [XOR 问题]
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- C++为什么尽管我调用了void函数,它却不起作用
- 为什么在保护模式下继承升级不起作用
- 循环在计数器中不起作用
- 在其他文件中创建类时在 c++ 项目中不起作用
- Visual studio代码重构似乎不起作用(例如,重命名符号-f2)
- 为什么二进制搜索在我的测试中不起作用
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 为什么 const std::p air<K,V>& 在 std::map 上基于范围的 for 循环不起作用?
- 带有指定长度字符* 参数的 std::regex_search 在 VS2017 中不起作用?
- Bjarne Stroustrup Book - std_lib_facilities.h - 不起作用(未知类型名称)
- 为什么简单的算术减法在"if"条件下不起作用?
- 为什么Stroustup书中的has_f不起作用
- 为什么这个 RAII cout 重定向器不起作用:
- 函数 system() 中的输出重定向似乎不起作用
- 重定向子进程的输入和输出不起作用
- DLL 输出到 stderr 在从父级重定向时不起作用
- 重命名函数不起作用,使用 c++