草庐IT

c++ - C++ 中的 fstream 错误

我真的需要你的帮助。看来我不能用C++进行文件操作。我使用fstream进行了一些文件操作,但是当我编译它时,出现了一个错误:|63|error:nomatchingfunctionforcallto'std::basic_fstream::open(std::string&,constopenmode&)'|我犯了什么错误?部分源码如下:#include#include#include#includeusingnamespacestd;inlineintexports(){stringfdir;//ExportTiledMapcout>fdir;fstreamfp;//Filefor

c++ - std::ofstream::close() 实际上做了什么?

本题:Howtoprotectlogfromapplicationcrash?把我带到了另一个-std::ofstream::close()到底做了什么?我知道它调用flush(),这是一回事。但还有什么?关闭文件实际上是什么?编辑:让我重新表述一下我的问题-在调用close()期间是否对实际文件进行了任何物理操作,还是只是std::ofstream内部清理的东西? 最佳答案 除了刷新用户空间缓冲区,即flush(),close(2)在底层文件描述符上被调用。这取决于操作系统然后会发生什么,但很可能文件占用的实际存储空间没有任何变化

c++ - std::getline 在遇到 eof 时抛出

std::getline在获取eof时抛出异常。我就是这样做的。std::ifstreamstream;stream.exceptions(std::ifstream::failbit|std::ifstream::badbit);try{stream.open(_file.c_str(),std::ios_base::in);}catch(std::ifstream::failuree){std::cout在上面的代码中,getline在获取eof时抛出异常如何处理这种情况?编辑std::stringbuffer="";while(std::getline(stream,buffer

c++ - 将 std::cout 的拷贝重定向到文件

我需要将std::cout的拷贝重定向到文件。IE。我需要在控制台和文件中查看输出。如果我使用这个://redirectingcout'soutput#include#includeusingnamespacestd;intmain(){streambuf*psbuf,*backup;ofstreamfilestr;filestr.open("c:\\temp\\test.txt");backup=cout.rdbuf();//backupcout'sstreambufpsbuf=filestr.rdbuf();//getfile'sstreambufcout.rdbuf(psbuf)

c++ - 如果 cout.rdbuf() 用于切换缓冲区并且从不将其设置回去,会出现什么问题?

作者介绍thiscode在标题Abuserroronmyplatform下#include#includeintmain(){std::ofstreamlog("oops.log");std::cout.rdbuf(log.rdbuf());std::cout字符串“Oops!\n”被打印到文件“oops.log”。代码没有恢复cout的streambuf,但是VS2010没有报运行时错误。 最佳答案 由于log和std::cout共享一个缓冲区,该缓冲区可能会被释放两次(一次是在log超出范围时,然后在程序终止时再一次)。这会导致

c++ - IOS中如何使用fstream读取XML文件

我正在使用XCode,这里是XCode中的c++代码std::fstreamstream("templates.Xml",std::ios::binary|std::ios::in);if(!stream)returnfalse;我把Xml文件放在包含“.xcodeproj”的文件夹中,我把它放在包含“.app”的文件夹中,但流总是返回false,为什么? 最佳答案 您似乎正试图从错误的目录打开文件。“templates.Xml”保存在包中——不保存在文档目录中。默认情况下,如果您打开“./filename”,这实际上指向:/Use

c++文件输入输出流fstream指定文件路径正确书写

目录正确打开文本文件读取文本文件并打印输出字符数组方式读取并打印输出字符串方式读取并打印输出正确打开文本文件在从文件读取信息或者向文件写入信息之前,必须先打开文件。ofstream和fstream对象都可以用来打开文件进行写操作,如果只需要打开文件进行读操作,则使用ifstream对象。open()成员函数的第一参数指定要打开的文件的名称和位置,第二个参数定义文件被打开的模式。(ios::in——打开文件用于读取;ios::out——打开文件用于写入);1、直接复制文件路径读取文件流(❌错误的,无法读取成功)fstreamafile;//afile.open("E:\C++\test",ios

c++ - filesystem::canonical 能否用于防止传递给 fstream 的文件路径的文件路径注入(inject)

我有一个公共(public)文件夹pub,里面有子文件夹和文件。用户现在给我一个相对文件路径,我执行一些映射,然后使用fstream读取文件并将其返回给用户。现在的问题是,如果用户给我一条路径,例如../fileXY.txt或其他考虑路径遍历或其他类型的文件路径注入(inject)的奇特内容。fstream只是接受它并读取我的公共(public)pub文件夹之外的潜在文件,或者更糟的是给他们一个我系统上所有文件的列表等......。在重新发明轮子之前,我在文件系统库中搜索我看到有这个std::filesystem::canonical函数并且有很多关于范式的讨论。我在这里有一个一般性问

c++ - 使用 ifstream 查找大文件

我正在使用ifstream在C++中实现一个程序,该程序必须在大文件(~1TB)中查找。然而,这在读取2GB后失败了。有没有办法获取文件位置,即使是大文件?我为32位Windows机器编译。std::ifstreamf;f.open(filename.c_str(),std::ifstream::in|std::ifstream::binary);while(true){std::cout 最佳答案 由于您是在32位平台上编译,如果您使用fstream,您将获得32位访问权限。要访问大文件,您需要使用依赖于平台的解决方案:对于Win

C++ std::istream readsome 不读取任何内容

这就像readsome甚至没有阅读。返回0并且不读取任何字符。这里有什么问题?#include#includeintmain(){std::fstreamstream("list.cpp",std::ios::in);if(stream.good()||!stream.bad()||stream.is_open()){std::cout输出:嗯,流看起来不错。0:大号 最佳答案 咨询areference,Thebehaviorofthisfunctionishighlyimplementation-specific.Forexamp