为什么我不能写下面的代码?#include#includebooltouch(conststd::string&file_path){returnstd::ofstream(file_path,std::ios_base::app);}intmain(){touch("foo.txt");}输出prog.cpp:Infunction'booltouch(conststring&)':prog.cpp:6:52:error:cannotconvert'std::ofstream{akastd::basic_ofstream}'to'bool'inreturnreturnstd::ofst
我正在尝试使用std::ofstream()编写UTF-16编码文件。即使在二进制模式下写入"\n\0"也会被写成"\r\n\0"。示例代码:std::stringfilename=...std::ofstreamfout(filename,std::ios_base::binary);fout.write("\xff\xfe",2);fout.write("\n\0",2);fout.close();生成的文件的十六进制数据是:fffe0d0a00我一定是做错了什么。有什么想法可以防止写入0x0d吗?我正在使用MSVisualStudio2013。更新:它莫名其妙地开始按预期工作。将
这是我的代码:#include#includeusingnamespacestd;intmain(){ifstreamifile("input.dat",ios::in);ofstreamofile("output.dat",ios::out);intnum;ifile>>num;ofile问题是,output.dat中的所有内容都在同一行。我该如何解决这个问题?谢谢!编辑:我使用Windows查看文件并使用Linux进行编译。这就是我遇到这个问题的原因。在Linux端使用catoutput.dat查看文件内容会发现当时Windows与Linux的换行符不同。
我正在尝试打开一个文件进行输出并附加到它。附加到它之后,我想将我的输出位置移动到文件中的其他位置并覆盖现有数据。据我了解,std::ios_base::app将强制所有写入到文件的末尾,即不是我想做的。因此,我相信std::ios_base::ate是传递给std::ofstream::open()的正确标志。但是,它似乎没有按预期工作://g++test.cpp//clang++test.cpp//withandwithout-std=c++11#include#includeintmain(){std::streamposfin,at;{std::ofstreaminitial;i
这个问题在这里已经有了答案:Doesstd::ofstreamtruncateorappendbydefault?(1个回答)关闭2年前。根据此C++引用:http://www.cplusplus.com/reference/fstream/ofstream/ofstream/,std::ofstream的默认打开模式是ios_base::out并且它没有提到隐含的其他模式。因此,我希望如果我用一个小文件覆盖一个大文件,大文件的“超出”部分应该保持不变,只有文件的第一部分应该被新的、更短的数据替换。另一方面,ApacheC++标准库用户指南(http://stdcxx.apache.o
我以二进制模式打开了一个文件,并且想写入一个文件。ofstreamofile("file.txt",ios_base::binary)inta=1;floatf=0.1;stringstr=10;ofile想知道使用" 最佳答案 operator但是,如果您正在编写非pod类型,则需要小心。你不能只说:write(&mystring,sizeof(std::string));您需要有一些方法来输出实际数据,这些数据不存储在类或结构本身中。 关于c++-ofstream" h
在C++中有没有一种方法可以检查ostream是否存在?对象是cout或ofstream目的?类似于:ostream&output(ostream&out){if(out==cout)returnout;else{out我想这样做的原因是我想重载运算符根据与它一起使用的流类型做两件不同的事情。是否可以只重载每次使用不同类型的流运算符两次?更新以更好地反射(reflect)意图。 最佳答案 您肯定会通过检查流缓冲区身份获得更多信息if(s.rdbuf()==std::cout.rdbuf())这是因为将流交叉分配/别名到缓冲区非常简单
我正在运行一些基准测试以找到用C++将巨大数组写入文件的最有效方法(在ASCII中超过1Go)。所以我将std::ofstream与fprintf进行了比较(参见下面我使用的开关)case0:{std::ofstreamout(title,std::ios::out|std::ios::trunc);if(out){ok=true;for(i=0;i我的大问题是fprintf似乎比std::ofstream慢12倍以上。您知道我的代码中问题的根源是什么吗?或者std::ofstream与fprintf相比可能优化得非常好?(还有一个问题:你知道另一种更快的写入文件的方法吗)非常感谢(详
我正在尝试使用std::ofstream::write方法编写二进制文件。我发现,有些字符不是按原样写的,例如:std::ofstreamin("testout");inti=10;in.write((constchar*)(&i),sizeof(i));in.close();return0;将以下内容写入二进制文件:0d0a000000为什么会出现额外的0d字节? 最佳答案 您必须在打开时指定std::ofstream::binary。否则,在文本文件模式的Windows上,程序中的\n(0x0a)将转换为/自\r\n(0x0d0
以下代码是在Windows7x64上使用VC++2012年11月CTP编译的。#includeusingnamespacestd;intmain(){ofstreamfout("log.txt",ios::app|ios::trunc);if(!fout){coutThecppreference.comwebsite并没有说ios::app不能与ios::trunc组合。ios::app和ios::trunc的确切语义是什么? 最佳答案 传递这些标志的filebuf构造函数†具有基于C++11表132中定义的那些标志的行为:+---