问题标签 [fstream]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1082 浏览

c++ - 读取文件并删除重复的字母

所以我的目标是创建一个函数,将部分填充的字符数组作为形式参数,并从数组中删除所有重复的字母。所以我只需要读取一个 .txt 文件,其内容类似于“11 ABC abca A ggt”,然后让程序吐出“ABC abcg t”

截至目前,我的程序吐回“1 ABC abc”

我真的很感激这方面的任何帮助。

这是我所拥有的...

0 投票
2 回答
4615 浏览

c++ - C++文本文件指针问题

我正在编写一个函数,它应该(如果文件已经存在)将第一个数字加一并将函数的参数附加到文件的末尾。

例子:

  1. 附加(4,9);
  2. 附加(5,6);

1 处的文件内容:1 \n 4 \n 9

2处的文件内容:2 \n 4 \n 9 \n 5 \n 6

程序永远不会进入第二个 while 循环,因此永远不会将内容复制到数组中,然后再复制到文件中。我不确定到底是什么问题或如何解决它。任何帮助将不胜感激。:)

0 投票
3 回答
940 浏览

c++ - 使用 C++ 编写二进制文件:默认语言环境重要吗?

我的代码使用带有二进制标志集的 fstream 并使用未格式化的 I/O 函数读取和写入来操作二进制文件。这在我曾经使用过的所有系统上都能正常工作(文件中的位与预期完全相同),但这些基本上都是美国英语。我一直想知道这些字节是否有可能被不同系统上的编解码器修改。

听起来标准说使用未格式化的 I/O 与使用 sputc/sgetc 将字符放入流缓冲区中的行为相同。这些将导致streambuf 中的溢出或下溢函数被调用,听起来这些会导致某些东西通过一些codecvt(例如,参见c++ 标准中的27.8.1.4.3)。对于 basic_filebuf,此编解码器的创建在 27.8.1.1.5 中指定。这使得结果看起来取决于 basic_filebuf.getloc() 返回的内容。

所以,我的问题是,我是否可以假设在一个系统上使用 ofstream.write 写出的字符数组可以在另一个系统上使用 ifstream.read 逐字恢复,无论任何人可能在他们的系统上使用什么语言环境配置?我会做出以下假设:

  1. 该程序正在使用默认区域设置(即,该程序根本没有更改区域设置本身)。
  2. 系统都具有 CHAR_BIT 8,每个字节内具有相同的位顺序,将文件存储为八位字节等。
  3. 流对象设置了二进制标志。
  4. 在这个阶段,我们不需要担心任何字节序差异。如果将数组中的任何字节解释为多字节值,则将在稍后阶段根据需要处理字节顺序转换。

如果默认语言环境不能保证在某些系统配置(我不知道,阿拉伯语或其他东西)上未经修改地通过这些东西,那么使用 C++ 编写二进制文件的最佳方法是什么?

0 投票
2 回答
4272 浏览

c++ - 将文件中的文本加载到二维数组中(C++)

我正在制作一个游戏,并将地图数据存储在一个大小为 [34][10] 的二维数组中。最初,我使用一个简单的函数来填充数组并使用以下代码将此数据保存到文件中来生成地图:

这会输出一个看起来像我想要的文本文件。但是,当我尝试使用以下代码重新读取它时,我会遇到大量访问冲突,并且它会在运行时崩溃:

有谁知道问题是什么?

0 投票
5 回答
594 浏览

c++ - 将 Fstream 的一部分复制到 Istringstream

经过大量寻找解决方案后,我决定实际寻求帮助!

我有一个由许多块组成的文件,其中每个块可能会或可能不会被压缩。在每个块之前是一个块大小的指示以及该块是否被压缩。每个块中都有一个标识该块的字符串。给定一个块名称,我想从文件中获取关联的块。

我的第一个想法是读取压缩标志和块的大小,将块读入 istringstream,如果需要解压缩 istringstream,然后搜索块名称。我可以读取压缩标志和块的大小,但我不知道如何将文件数据块读入 istringstream。我看到人们在哪里将整个文件读入 istringstream,但我不想这样做,因为每个块可能需要也可能不需要解压缩。

我错过了任何想法或解决方案的链接?还是有更好的算法?感谢您的任何评论。

0 投票
6 回答
2152 浏览

c++ - 同时写入文件

我有这个工具,其中一个类似日志的文件由多个进程写入。

我想要实现的是在第一次打开文件时将其截断,然后由打开它的几个进程在最后完成所有写入。所有写入都被系统地刷新和互斥保护,这样我就不会得到混乱的输出。

首先,一个进程创建文件,然后启动一系列其他进程,一次一个,然后打开文件并写入文件(主进程有时会插入其他内容;从进程可能打开也可能不打开,并且写东西)。

我希望尽可能不使用更多已经存在的 IPC(我现在所做的只是写入一个 popen 创建的管道)。除了 CRT 和 Win32 API,我无法访问外部库,我不想开始编写序列化代码。

这是一些代码,显示了我去了哪里:

好吧,这是行不通的:尽管从进程的输出按预期排序,但主进程写入的内容要么是捆绑在一起,要么是在错误的地方,如果它根本存在的话。

我有两个问题:给ofstream的构造函数的标志组合是正确的吗?反正我走对了吗?

0 投票
7 回答
3020 浏览

c++ - fstream跳过字符而不读取位图中

我正在尝试使用 fstream 读取 bmp 文件。但是,它会跳过 08 和 0E(十六进制)之间的值,例如,对于值 42 4d 8a 16 0b 00 00 00 00 00 36

它读到

42 4d 8a 16 00 00 00 00 00 36

跳过 0b 就像它甚至不存在于文档中一样。

该怎么办?

代码:

编辑:使用in.read(a,1);而不是in>>a;解决阅读问题,但我需要编写无符号字符并且f.write(a,1);不接受无符号字符。有人有用无符号字符写的功能吗?

0 投票
2 回答
719 浏览

c++ - 使用 fstream tellg 读取流的一部分直到结束

我有这个简单的代码,需要获取正在写入的大日志文件的一部分。在某些时候,它存储从 streampos start = istream::tellg(); 返回的当前位置;方法。稍后代码必须从流中读取从开始到结束的缓冲区。代码大概是这样的:

我观察到的效果是size_read小于size_to_read并且设置了它的 eof 标志。结束指针不应该准确地指定流结束的位置并且 read() 方法返回确切的数据量吗?没关系,我可以通过检查 eof 标志来解决它。但是,任何人都可以提供这种效果的解释吗?

谢谢。

0 投票
1 回答
2214 浏览

c++ - tellg() 失败的可能原因?

ifstream::tellg()为某个文件返回 -13。

基本上,我编写了一个分析一些源代码的实用程序;我按字母顺序打开所有文件,我从“Apple.cpp”开始,它运行良好。但是当它到达“Conversion.cpp”时,总是在同一个文件上,成功读取一行后tellg()返回-13。

有问题的代码是:

的代码AtEof是:

在成功读取 Conversion.cpp 的第一行后,它总是以DEBUG - tellg(): -13.

这是TextIFile全班(我写的,可能有错误):

平台是 Visual Studio,32 位,Windows。

编辑:适用于 Linux。

编辑:我找到了原因:行尾。Conversion 和 Guid 以及其他都有 \n 而不是 \r\n。我用 \r\n 保存了它们,它起作用了。不过,这不应该发生是吗?

0 投票
2 回答
35903 浏览

c++ - 使用 ios::binary 或 ios::out 或两者打开文件有什么区别?

我试图弄清楚打开文件之间的区别:

或者

或者

我发现所有这些形式都是相同的:在所有情况下,文件上的相同输出都是使用*fileName*<<或生成的*fileName*.write()