C和C++中的文件读入写出区别

本文详细介绍了C语言和C++中文件读写的实现方式。C语言通过fopen、fscanf、fprintf等函数结合文件指针进行操作;而C++则利用标准库中的ifstream和ofstream简化流程。

C和C++中的文件读入写出区别


1、先写写C的吧,在C语言中读入写出文件要用到fopen这个函数,而且要先定义文件指针,为了方便,我们不妨先定义两个,一个fp1用作输入文件指针,另一个fp2用作输出文件指针。

<span style="font-size:18px;">FILE *fp1,*fp2;</span>

接下来我们使用fopen()函数以只读方式(r)打开输入文件input.txt

<span style="font-size:18px;">fp1 = fopen("input.txt","r");</span>

然后使用fopen()函数以写入方式(w)打开输出文件output.txt

<span style="font-size:18px;">fp2 = fopen("output.txt","w");</span>

接下来的事情就是将“从屏幕读入数据”改成“从文件读入数据”,这一步只要将代码中的所有"scanf"改成“fscanf”,然后在参数列表的第一位加上输入文件指针fp1,这样就可以从输入文件中读取内容了。

<span style="font-size:18px;">fscanf(fp1,"%d",&temp);</span>

同理,将“把数据输出到屏幕”改成“将数据输出到文件”也是把代码中的所有“printf”改成“fprintf”,然后在参数列表的第一位加上输出文件指针fp2,这样就可以将数据写入到输出文件了。

<span style="font-size:18px;">fprintf(fp2,"%d",temp);</span>

最后一步,使用fclose()函数关闭输入文件盒输出文件。

fclose(fp1);

fclose(fp2);

tips:前面只需要#inlcude <stdio.h>即可

2、再来看C++版的

要想对文件进行读写,必须先把fstream库包括到源文件里:

<span style="font-size:18px;">#include <fstream></span>
接下来,需要创建一个ofstream(output file stream输出文件流)类型的变量,代码如下:
<span style="font-size:18px;">std::ofstream fileOutput("filename");</span>
然后直接就能往里面写了
<span style="font-size:18px;">fileOutput <<"hello world"<<"\n";</span>
使用完毕之后也要记得关闭输出流
<span style="font-size:18px;">fileOutput.close();</span>
同理,从文件输入也是一样的,创建一个ifstream即可
<span style="font-size:18px;">std::ifstream fileInput("filename");</span>
后面就类似了,所以,总体上还是C++版本的更简洁一些。
### C++ 文件读取与写入操作 在C++中,文件读取写入可以通过标准库中的`<fstream>`来完成。对于编译原理相关的场景,通常涉及到中间表示(IR)、符号表以及其他辅助数据结构的存储与加载。 #### 使用 `fopen` `fclose` 为了确保程序能够正确处理文件,在打开文件时可以选择不同的模式: - `"r"` 表示只读模式; - `"w"` 表示覆盖写入模式; - `"a"` 表示追加写入模式。 当使用这些函数时需要注意返回值以判断是否成功打开了目标文件[^3]。 ```cpp #include <cstdio> int main() { FILE* file; const char* filename = "example.txt"; // 打开文件用于写入 if (fopen_s(&file, filename, "w") != 0) { printf("无法创建文件\n"); return -1; } fprintf(file, "%s", "这是一个测试字符串。\n"); fclose(file); // 打开文件用于读取 if (fopen_s(&file, filename, "r") != 0) { printf("无法打开文件\n"); return -1; } char buffer[256]; while(fgets(buffer,sizeof(buffer),file)!=NULL){ puts(buffer); } fclose(file); return 0; } ``` 这段代码展示了基本的文件读写流程:先尝试以写入模式打开文件并写入一些内容,之后再次以读取模式打开该文件并将其中的内容打印到控制台。这里采用了较为传统的C风格API来进行文件操作。 #### 使用 `<fstream>` 现代C++更推荐使用流对象来进行文件输入输出操作,这种方式更加直观易懂,并且提供了更好的异常安全性支持。 ```cpp #include <iostream> #include <fstream> #include <string> using namespace std; void writeToFile(const string& fileName) { ofstream outFile(fileName); if (!outFile.is_open()) { cerr << "未能打开文件进行写入:" << fileName << endl; return; } outFile << "这是通过ofstream写的文本。" << endl; } void readFromFile(const string& fileName) { ifstream inFile(fileName); if (!inFile.is_open()) { cerr << "未能打开文件进行读取:" << fileName << endl; return; } string line; while(getline(inFile,line)){ cout<<line<<endl; } } int main(){ string filePath="test_file.txt"; writeToFile(filePath); readFromFile(filePath); return 0; } ``` 此版本利用了面向对象的方式定义了一个简单的文件I/O应用程序。它首先调用了`writeToFile()`函数向指定位置创建新文件并向其内部添加了一条消息;接着又执行了`readFromFile()`用来展示刚刚存进去的信息。这种方法不仅简化了编码过程还增强了可维护性扩展性[^2]。 #### 编译原理应用场景下的考虑因素 考虑到编译器的工作机制,特别是前端解析阶段产生的抽象语法树(AST),或者是优化过程中生成的各种表格信息,都需要被持久化下来以便后续分析或调试用途。因此,在设计此类功能模块时应特别注意以下几个方面: - **高效性**:由于可能涉及大量数据交换,所以应当选用性能优越的数据序列化方案。 - **兼容性**:保证不同平台间的一致性非常重要,尤其是在跨操作系统移植项目的时候。 - **灵活性**:允许用户自定义保存格式有助于提高工具链之间的互操作能力。 综上所述,无论是采用低级别的C API还是高级别的C++ Stream Library都可以满足大多数情况下对文件系统的访问需求。然而针对特定领域如编译技术,则需进一步探索适合的技术栈来达成预期效果[^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值