fstream 文件为空(简单的小代码)
Posted
技术标签:
【中文标题】fstream 文件为空(简单的小代码)【英文标题】:fstream file empty (easy small code) 【发布时间】:2013-11-13 16:18:16 【问题描述】:我编写了这个简单的代码来尝试这个fstream file ("....txt")
,但文件保持为空!
有人可以帮忙吗?
(请注意,我有一个 "selfmade" 标头 文件,其中包括我通常使用的所有文件和命名空间)
这个小程序应该从 File.txt 中找出所有内容,然后让您有机会在文件中键入新行,以中断您使用 break 的 cin 进度。但就像我说的那样,文件是空的
#include <myHead.h>
int main()
string line;
int i;
fstream myFile ("File.txt");
if (myFile.is_open())
while (getline(myFile,line))
cout << line << "\n";
line = "0";
for(line;line!="break";cin >> line)
if(line != "break")
myFile << line;
myFile.close();
else
cout << "error, File.txt cannot be opened!";
getch();
return 0;
【问题讨论】:
只是我的一些小毛病。不需要myFile.close();
。 RAII 成语表示fstream
对象将关闭并处理资源。
好的,谢谢。有什么理由吗?我知道它总是在没有的情况下工作,但我认为关闭它还是很好的,不是吗?
研究C++ RAII成语。
哦,您的问题的解决方案是您不刷新我认为的 fstream。我会添加一个答案。
【参考方案1】:
在你读完文件后,文件处于“到达文件末尾”的状态,这不是好。
您需要在写入(追加)之前重置流状态。这是通过流方法clear()
完成的。
此外,您可能希望将文件作为输入和输出显式打开:ios::in | ios::out
。
【讨论】:
哟,谢谢!那行得通!但为什么 ios::in 和 ios::out 呢?这不是fstream的标准吗? 和另一个小问题:现在当我写例如:你好,你好吗?程序用回车“替换”空格,所以只有单个单词,没有句子,但我不想用你好,_how_are_you? 哦,我只需要使用 getline。谢谢你的帮助,安德烈也是!主题可以关闭 正如我所说,ios::in | ios::out
将是一个 explicit 文件模式,让读者知道您正在为输入和输出打开文件。有些人可能不记得fstream
默认是两者。显式文本不会损害代码生成,但确实提高了可读性。【参考方案2】:
即使它已经被回答,我想指出一个更好的结束输入的选择。如果你这样做:
#include <string>
#include <iostream>
#include <fstream>
int main(void)
std::fstream file("file");
std::string buf;
if (file.is_open())
std::cout << "READ:" << "\n\n";
while (getline(file, buf))
std::cout << buf << "\n";
file.clear();
std::cout << '\n' << "WRITE:" << "\n\n";
while (getline(std::cin, buf))
file << '\n' << buf;
file.seekp(0, file.end);
file.seekg(0, file.end);
file.close();
else
std::cout << "error, file could not be opened.";
return 0;
您可以通过在 Windows 上按 Ctrl+Z + Enter
或在 UNIX 上按 Ctrl+D
来结束流。
【讨论】:
以上是关于fstream 文件为空(简单的小代码)的主要内容,如果未能解决你的问题,请参考以下文章
MVP+Dagger2+Rxjava+Retrofit+GreenDao 开发的小应用,包含新闻图片视频3个大模块,代码封装良好
MVP+Dagger2+Rxjava+Retrofit+GreenDao 开发的小应用,包括新闻图片视频3个大模块,代码封装良好