c++在Unix上读写文件
C++ Read/write file on Unix
我知道这是一个非常具体的问题。我在unix机器上使用g++编译器编译c++代码。我有以下一行代码来读取指定为c++参数的文本文件:test.cc
int main(int argc, char *argv[])
{
ifstream inputfile(argv[1]);
}
现在用g++编译后,我将其命名为:
./test file.txt
但是如果我想把它命名为
我该怎么做呢./test <file.txt
简而言之,我如何使用默认输入/输出
您应该检查main
的参数,看看是否有给定给程序的参数。如果是,那么你可以使用它作为文件,否则你使用std::cin
。
下面是一个例子:
void do_something(istream &input)
{
// Read some stuff from the input
}
int main(int argc, char *argv[])
{
if (argc == 1)
do_something(cin);
else if (argc == 2)
do_something(ifstream(argv[1]));
else
{
cout << "Error: Must supply a filen";
return 1;
}
}
我之所以调用另一个函数来读取和处理输入,是因为你不能赋值流,而必须使用引用或指针。将单独的任务放在单独的函数中也很好,因为这会增加代码的可读性。
当你想从标准输入中读取时,使用std::cin
而不是打开你自己的流
std::string s;
std::getline(std::cin, s);
Using <将该文件重定向到stdin,这样您就可以通过c++中的std::cin获得它。>
您需要从stdin, da文件中读取。
即从键盘读取。
当你用管道输入内容时,它会像从键盘上输入一样被读取。
您可以执行大多数Unix命令所做的操作:如果指定了文件名,则从文件中读取。如果文件名缺失,则从标准输入中读取。
cin
对象已经在iostream
中定义。从cin
而不是inputfile
中读取
可能
ifstream &myin;
if (argc>1) {
ifstream* inputfilep = new infstream(argv[1]);
myin = *inputfile;
}
else myin = cin;
/* do your input on myin */
您将需要修改您的示例以检查argc以查看是否有任何命令行参数传入,因为shell剥离了输入重定向,因此如果argc为0,则根据其他示例从标准中读取,否则作为示例代码
你什么都不用做。就像从命令行读取一样编写程序。
相关文章:
- 用C++快速读写文件
- C++中读/写二进制文件
- 为什么使用_access时只读测试对读写文件有效
- 谷歌测试读写同一文件失败
- UWP 是否有同步文件读/写 API
- 为什么SDL_RWFromFile(文件,"w+")不能像它应该的那样读写?它只打开文件进行写入
- 读/写文件导致错误。(javaScript & C++)
- 如何在C++中读/写文件时移动到下一行
- 用cocos2dx(v3.6)读写文件到android错误
- Windows Phone 8和读/写文件
- 在多线程环境(C++)中读/写文件的最佳方式
- 在C++中读写文件
- 在c++中以UNC路径读写文件
- c++在Unix上读写文件
- 如何在c++中使用' fstream '同时读写文件
- 如何使用Qt/ c++创建/读/写文件和存储本地设置与程序
- 在for循环、读写文件时遇到困难
- c++中读写文件的多线程
- 如何读写文件
- 读写文件流C++