问题标签 [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 投票
2 回答
5847 浏览

c++ - 在 C++ 中从文本文件读取输入到数组

好吧,温柔点,因为我是编程新手。到目前为止,我只学习了 C++,并且正在运行 Visual Studio 2010 作为我的编译器。对于这个程序,我试图从文本输入文件中读取信息并将信息写入一组三个数组。一个数组将处理姓名列表,另外两个数组分别用于工作时间和小时工资率。我将使用后两者来计算一组收益,并将整个结果作为报告输出到另一个文本文件中。然而,我的问题是获取第一个数组的输入。我正在使用的输入文件的文本排列如下:

J. Doe* 35 12.50 J. Dawn* 20 10.00 .........

这些名称后面带有星号,因为我正在尝试使用 ifstream getline 来获取带有星号作为分隔符的名称,并将以下两个数字写入其他两个数组。后两个值由空格分隔,所以我认为它们不会引起任何问题。我确定还有其他需要处理的错误,但我需要先解决第一个错误,然后才能开始调试其余错误。

我的问题出现在我调用 inFile.getline 的行上,因为我收到以下错误:error C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std ::streamsize,_Elem)' : 无法将参数 1 从 'std::string' 转换为 'char *'。

从我在其他地方读到的内容来看,(我认为)问题源于试图将字符串写入 char 数组,因为它们具有不同的数据类型,所以这不起作用。我不确定是否存在其他可行的方法来获取名称,因为我需要分隔符将名称与数值分开。任何有关如何解决此问题的建议将不胜感激。

这是我写的源代码:

我已经包含了整个程序,让您了解我打算在哪里进行编码。在此先感谢您的帮助!

0 投票
2 回答
18861 浏览

c++ - 在 C++ 中从文本文件读取输入到数组

好吧,温柔点,因为我是编程新手。到目前为止,我只学习了 C++,并且正在运行 Visual Studio 2010 作为我的编译器。对于这个程序,我试图从文本输入文件中读取信息并将信息写入一组三个数组。一个数组将处理姓名列表,另外两个数组分别用于工作时间和小时工资率。我将使用后两者来计算一组收入并将这些计算结果输出到另一个文本文件。然而,我的问题是获取第一个数组的输入。我正在使用的输入文件的文本排列如下:

J. Doe* 35 12.50

J.黎明* 20 10.00 ......

这些名称后面带有星号,因为我正在尝试使用 ifstream getline 来获取带有星号作为分隔符的名称,并将以下两个数字写入其他两个数组。后两个值由空格分隔,所以我认为它们不会引起任何问题。我确定还有其他需要处理的错误,但我需要先解决第一个错误,然后才能开始调试其余错误。我在调用 inFile.getline 的行中遇到错误,内容如下:

错误 C2664: 'std::basic_istream<_Elem,_Traits> &std::basic_istream<_Elem,_Traits>::getline(_Elem *,std::streamsize,_Elem)' : 无法将参数 1 从 'std::string' 转换为'字符 *'。

从我在其他地方读到的内容来看,(我认为)问题源于试图将字符串写入 char 数组,因为它们具有不同的数据类型,所以这不起作用。我不确定是否存在其他可行的方法来获取名称,因为我需要分隔符将名称与数值分开。任何有关如何解决此问题的建议将不胜感激。

这是我写的源代码:

我已经包含了整个程序,让您了解我打算在哪里进行编码。在此先感谢您的帮助!

0 投票
2 回答
215 浏览

c++ - 推送后获取正确文本时出错,然后从 std::queue 获取 front()

我在这里有点麻烦......我将首先从要求开始:

  1. 尝试向服务器发送数据(msg)
  2. 如果失败,将其存储在本地硬盘文件中,作为 CSV 条目列表
  3. 尝试在某个预定点将 msg 数据发送到服务器。
  4. 如果消息发送成功,则将其从文件中删除
  5. 继续该过程,直到向服务器发送数据失败。并转到第 2 步

我做了什么:

  1. 使用 fstream 对象将失败的消息写入本地文件
  2. 使用 fstream 对象从该文件中读取,并存储在动态创建的 std::queue 中
  3. 对于从文件中读取的每个味精,将其推送到队列中
  4. 推送所有消息后,使用 std::front() 获取第一个消息,并将其读入自定义对象数据结构。

问题是: 我在将其推入队列之前和之后打印从硬盘文件读取的味精。在推送队列之前,我打印到消息框/文本文件日志中的数据绝对没问题。但是,当我在获取 queue:front() 后打印相同的数据时,它会打印所有垃圾。*

我不是队列和 STL 方面的专家,所以我需要指导。

代码如下:

p>

谢谢,丹尼尔

0 投票
2 回答
6326 浏览

c++ - 为什么我不能用 operator>> 读取 fstream 的二进制数据?

如果我执行以下操作:

我的流将始终设置failbit并且data将保持未初始化。但是,如果我读 a charor unsigned char,则流很好。 perror()告诉我“结果太大”。

我在 Google 上看到的唯一内容是一个建议,说不operator>>应该用于二进制数据(prefer read()),但我发现该运算符更清洁、更易于使用——而且它不需要强制转换所有内容。

有人可以解释这个问题吗?

0 投票
1 回答
221 浏览

visual-c++ - VC++ 2010怎么用char buffer而不是wchar_t buffer来表示basic_filebuf?

VC++ 文档说:(在:http: //msdn.microsoft.com/en-us/library/tzf8k3z8 (VS.90 ) .aspx)对我来说非常奇怪

“basic_filebuf 类型的对象是使用 char * 类型的内部缓冲区创建的,无论类型参数 Elem 指定的 char_type 是什么。这意味着 Unicode 字符串(包含 wchar_t 字符)将在之前转换为 ANSI 字符串(包含 char 字符)它被写入内部缓冲区。要在缓冲区中存储 Unicode 字符串,请创建一个 wchar_t 类型的新缓冲区并使用 basic_streambuf::pubsetbuf() 方法设置它。要查看演示此行为的示例,请参见下文。

为什么?

0 投票
5 回答
3829 浏览

c++ - C++ ifstream/fstream 破坏数据

我是 C++ 新手,我必须为学校做作业。

我需要在不使用 api 调用或系统集成命令的情况下复制二进制 * 文件。在学校,我们使用 Windows 机器。

我搜索了一下,发现在不使用任何 api 的情况下复制数据的最佳方法是使用 iostream (ifstream/fstream) 这是我正在使用的代码:

out.exe 无法正常工作,在 winhex.exe 中查看后,我发现数据已被修改,而我没有对其进行任何操作

谁能帮我?

*该文件是一个简单的 hello world 程序,它的消息框是“hello world”

编辑:

对不起,我的反应迟钝,它正在睡觉。无论如何,我已经在十六进制编辑器中打开了两个(结果和原始)程序。似乎我尝试了这条线:

更改为:

正如您在读取或写入过程中可以或看不到的那样,一个字节正在被删除(或添加,有时也会发生)

0 投票
9 回答
393 浏览

c++ - C++中的文件输入/输出

我要做的就是将 readme.txt 的内容打印 20 次。请帮忙。

0 投票
2 回答
1409 浏览

c++ - C++ ofstream - 只有 1 个字符串被写入文件,之前的字符串被覆盖,为什么?

我编写了一个命令行程序,该程序将通过管道逐行清理和重组我们存档的服务器日志到新的目标文件。每个目标文件都有一个相应的正则表达式过滤器项,因此如果源文件中的红色行与正则表达式匹配,则会被写入此特定目标文件。

我从配置文件中读取了正则表达式字符串及其目标文件字符串,并将这些信息保存在向量中,以便能够使用配置中的每个新的标记/过滤器对动态调整它们的大小。

以下代码显示了我如何循环遍历所有源文件,并且对于每个源文件,我逐行读取,对于可能为红色的每一行,我循环遍历配置中定义的所有过滤器,如果正则表达式与该行匹配我将这一行写入到 ofstream。每次我这样做时,在我打开新的目标文件之前,ofstream 都会被 close()d 和 clear()ed。

我现在的问题是一切正常,除了我的目标文件在程序结束后只包含 1 个字符串。它包含我写入文件的最后一个字符串。

我之前写入文件的所有字符串似乎都被覆盖了。我想我做错了什么,但我不明白它是什么。

这是代码摘录:

编辑:

我忘记了我使用的重新打开功能

0 投票
1 回答
1429 浏览

c++ - 从文件中读取时出现问题。似乎过早地达到 EOF

我确信这个问题可以相对容易地解决,但我正在努力寻找问题。我的代码只是从文件中读取所有单词,然后将每个单词、单词位置、句子的开头和结尾存储在一个数组中。数组被输出到另一个文本文件。

我可以阅读直到最后一句话的所有信息,然后我有一个错误。有什么想法吗?

0 投票
2 回答
2073 浏览

c++ - 符号链接和文件重定向

在 C++ 中,我将如何检查我们正在打开的文件是否正在通过符号链接重定向?这是我的文件打开器处理程序:

提前致谢