C和C++文件读写之异同

#include <fstream> #include <iostream> using namespace std;

void main() {  // C++ STREAM --------------  ofstream ostream("a", ios::out);     ostream << "a" << endl << "abc" << endl << "c" << " "; // 不要以ends间隔,否则读取失败  ostream << 10; // 此时10尚在缓冲区,并未真正写到文件,若立刻读取文件数据会读不到他  ostream.flush(); // flush将缓冲区数据写入文件,如果调用close同样会flush,写入一个endl也可(等同put("/n") + flush())

 ifstream istream("a", ios::in);  char buffer[10];  istream >> buffer;  cout << buffer << endl;  istream >> buffer;  cout << buffer << endl;  istream >> buffer;  cout << buffer << endl;  int ia;  istream >> ia;  cout << ia << endl;

 // C FILE -------------  FILE* fb = fopen("b", "wb");   fwrite("ab/nc", sizeof("ab/nc"), 1, fb); // 写入 'a''b''/n''c''0'

 FILE* fc = fopen("c", "w");   int a = 10;  fwrite(&a, sizeof(a), 1, fc); // 写入四字节0x 0A 000000

 FILE* fd = fopen("d", "wb");  fprintf(fd, "a"); // 写入 'a''/0';  fprintf(fd, "/n"); // 写入 '/n'

 // fstream的读写方式总是将字符串转换为去掉eos的字符序列,将数值转换为字符列写入。读出时各数据比如以endl(/n)或空格或eof相隔,注意不要以ends相隔。  // binary模式只是会将(endl, /n)windows上转化为(/r/n).

 // 如果未设置binary, 换行符(/n, 0A )将按照所在操作系统的文件格式扩展(这里也只有WindowsDos文件格式会要扩展为(/r/n, 0D 0A ) )  // 反之若设置binary, 换行符(/n, 0A )将不会扩展, 此时若以windos记事本(将所有字节以字符形式呈现的程序)打开该文件, 0A 会被视作普通字符(呈现为黑色方块)而不会换行, 此时可利用UltraEdit将其转化为DOS文件格式, 或者用写字板(他会自动将/n识别作/r/n)亦可打开  // 所以仅从文件外观是无法判断该文件是DOS文件格式还是UNIX文件格式, 这也说明即便在Windows上也有UNIX文件存在, UNIX上也会有DOS文件存在。

 // 字符串在有无设置binary模式的状况相同, 均作为字符序列写入文件(eos, /0, 00被忽略, 除非手工写入ends).  // 数值在有无设置binary模式的状况也相同, 具备转换为字符序列写入文件,比如10将转换为'1','0'写入文件.

 // 由上可以看出fstream比之传统的FILE有一些不同  // 1. fstream比较适合读写文本文件,即所有数据均被作为字符写入或读出  // 2. 传统的C FILE总是工作在二进制下, 即所有数据均以原始字节呈现,比如int 10就被写入为0x 0A 000000(intel - ledian - byte - order, 如果是bigedian则为0x 0000000A ),而字符串则被写入为非带eos的字符序列(要读出带eos的字符串则必须以空格或换行间隔,这点同 ifstream),换行符/nwindows下也不会扩展。  //  - 注意C FILE被打开时的模式字"b"可有可无, 该字只是为了与ISO C兼容而已。  //  - fwrite(const void*, size_t size, size_t count, FILE*); size - 每次读写字节数, count - 读写多少次  //  - fread(void*, size_t size, size_t count, FILE*); 同上  // 3. FILE要实现fstream的字符序列读写功能则以fscanf, fprintf来实现 

 // 综合上述, 我们应该在以文本形式读写时选择fstream,而在二进制读写时选择FILE.

 system("pause"); }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值