C++ 读写操作同一个文件的几种方法

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

int main()
{
    // 打开文件 "test.txt" 同时读写操作
    filebuf buffer; // 建立一个 file stream 缓冲区,并将它装在两个stream对象上
    ostream output(&buffer);
    istream input(&buffer);
    buffer.open("test.txt", ios::in | ios::out | ios::trunc);

    for (int i = 1; i <=4 ; i++) {
        // 写一行数据
        output << i << ". line" <<endl;

        // 打印全部的文件内容
        input.seekg(0);  // 流设到开始处
        char c;
        while (input.get(c)) {
            cout.put(c);
        }
        cout << endl;
        input.clear();  // 清除eof 和 fail标记位
    }

    input.seekg(0);
    cout<< "把缓冲区指针传给流,输出全部内容\n" << input.rdbuf();
}

#if 0 / 以下内容为学习程序的资料,不编译 

// 建立一个 file stream 缓冲区,并将它装在两个stream对象上
filebuf buffer;
ostream output(&buffer);
istream input(&buffer);
buffer.open("test.txt", ios::in | ios::out | ios::trunc);

// 通常利用 class fstream 打开文件进行读写操作
fstream file ("test.txt", ios::in | ios::out);

// 也可以采用两个不同的 stream对象,一个用于读取,一个用于改写
ofstream out ("test.txt", ios::in | ios::out);
istream in (out.rdbuf());

// 设置stream缓冲区,重定向cout输出到文件
ofstream file ("cout.txt");
cout.rdbuf(file.rdbuf());

#endif

C++ 的流挺好玩的,今天看 C++ 流 不好的评价http://topic.csdn.net/u/20110823/20/5600d38a-e4f3-48f1-a70e-bb3119e7c8a7.html自己去看 PDF 版 C++标准程序库了摘写了这些代码,调试玩玩
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C中,可以使用几种不同的方法进行文件操作。一种常见的方法是使用文件指针来打开、取和文件内容。另一种方法是使用Windows API来处理文件。 在使用文件指针进行文件操作时,可以使用`fopen`函数打开文件,并使用`fread`和`fwrite`函数来取和文件内容。下面是一个示例代码: ```c #include<stdio.h> int main() { FILE* file; file = fopen("1.txt", "w"); //以入模式打开文件 if (file == NULL) { return -1; //打开文件失败 } fwrite("hello world", sizeof(char), 12, file); //入字符串 fputc('c', file); //入单个字符 fclose(file); //关闭文件 return 0; } ``` 另一种方法是使用Windows API来处理文件。可以使用`CreateFileA`函数来创建或打开文件,并使用`ReadFile`和`WriteFile`函数来取和文件内容。下面是一个示例代码: ```c #include<Windows.h> int main() { HANDLE hFile = CreateFileA("1.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); //以模式打开文件 if (hFile == INVALID_HANDLE_VALUE) { return -1; //打开文件失败 } DWORD len; WriteFile(hFile, "test", sizeof("test"), &len, NULL); //入字符串 char buf<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [C/C++文件(最全方法,多种实现)](https://blog.csdn.net/weixin_50964512/article/details/123240393)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值