欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)將內(nèi)容寫入文件的方法總結(jié)

 更新時間:2023年04月27日 14:12:43   作者:Thomas_Lbw  
本文主要總結(jié)了一下C/C++將內(nèi)容寫入文件的方法,C的方法有些單調(diào),畢竟沒有庫函數(shù)。C++則豐富些,下面我把搜集到的整理一下,供大家參考

一、C語言輸出內(nèi)容到文件

使用 C 的文件 I/O 函數(shù),例如 fopen(),fprintf(),fputs() 和 fwrite() 等。這些函數(shù)由 C 語言中的標準庫 stdio.h 提供。

#include <stdio.h>
 
int main()
{
    // 以寫入模式打開文件
    FILE *fp = fopen("myfile.txt", "w");
 
    if (fp == NULL)
    {
        // 打開文件失敗
        printf("Error opening file!\n");
        return 1;
    }
 
    // 使用 fprintf() 寫入字符串
    fprintf(fp, "Hello, world!\n");
 
    // 使用 fputs() 寫入字符串
    fputs("This is another string.\n", fp);
 
    // 使用 fwrite() 寫入二進制數(shù)據(jù)
    int num = 42;
    fwrite(&num, sizeof(int), 1, fp);
 
    // 關閉文件
    fclose(fp);
 
    return 0;
}

在這個代碼示例中,我們首先使用 fopen() 函數(shù)以寫入模式打開了一個文件,然后使用 fprintf(),fputs() 和 fwrite() 向文件寫入了字符串和二進制數(shù)據(jù),最后使用 fclose() 函數(shù)關閉了文件。請注意,在使用 fwrite() 函數(shù)寫入二進制數(shù)據(jù)時,我們需要提供要寫入的數(shù)據(jù)的指針,以及每個數(shù)據(jù)單元的大小和要寫入的數(shù)據(jù)單元數(shù)。

二、C++文件輸入/輸出流

此種是C++標準的輸入輸出,一般不會帶來字符種類不同引發(fā)的問題,比如寬字節(jié)和窄字節(jié)之間的區(qū)別,肯能我們打開文件內(nèi)容都一樣,但是涉及加密、編碼等操作寬窄字符是有區(qū)別的,這個是有教訓的,牢記。

下面是使用 C++ 中的文件輸入/輸出流的代碼示例:

#include <fstream>
#include <iostream>
 
int main()
{
    // 以寫入模式打開文件
    std::ofstream out("myfile.txt");
 
    if (!out)
    {
        // 打開文件失敗
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 使用流操作符 << 寫入字符串
    out << "Hello, world!" << std::endl;
    out << "This is another string." << std::endl;
 
    // 使用 write() 寫入二進制數(shù)據(jù)
    int num = 42;
    out.write(reinterpret_cast<char*>(&num), sizeof(int));
 
    // 關閉文件
    out.close();
 
    // 以讀取模式打開文件
    std::ifstream in("myfile.txt");
 
    if (!in)
    {
        // 打開文件失敗
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 使用流操作符 >> 讀取字符串
    std::string s;
    in >> s;
    std::cout << s << std::endl;
 
    // 使用 read() 讀取二進制數(shù)據(jù)
    in.read(reinterpret_cast<char*>(&num), sizeof(int));
    std::cout << num << std::endl;
 
    // 關閉文件
    in.close();
 
    return 0;
}

在這個代碼示例中,我們首先使用 ofstream 對象以寫入模式打開了一個文件,然后使用流操作符 << 向文件寫入了字符串,使用 write() 寫入了二進制數(shù)據(jù),最后使用 close() 關閉了文件。然后,我們使用 ifstream 對象以讀取模式打開了同一個文件,使用流操作符 >> 讀取了字符串,使用 read()讀取了二進制數(shù)據(jù),最后使用 close() 關閉了文件。

請注意,當使用 write() 寫入二進制數(shù)據(jù)時,我們需要將要寫入的數(shù)據(jù)的指針轉(zhuǎn)換為 char* 類型,并提供每個數(shù)據(jù)單元的大小和要寫入的數(shù)據(jù)單元數(shù)。當使用 read() 讀取二進制數(shù)據(jù)時,我們也需要將要讀取的數(shù)據(jù)的指針轉(zhuǎn)換為 char* 類型,并提供每個數(shù)據(jù)單元的大小和要讀取的數(shù)據(jù)單元數(shù)。

另一個 C++ 標準庫中的文件輸入/輸出流類型叫做 filebuf,它可以通過標準輸入/輸出流來讀寫文件。例如,下面是使用 filebuf 的代碼示例:

#include <fstream>
#include <iostream>
 
int main()
{
    // 以寫入模式打開文件
    std::filebuf fb;
    fb.open("myfile.txt", std::ios::out);
 
    if (!fb.is_open())
    {
        // 打開文件失敗
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 將文件緩沖區(qū)關聯(lián)到標準輸出流
    std::ostream out(&fb);
 
    // 使用標準輸出流寫入字符串
    out << "Hello, world!" << std::endl;
    out << "This is another string." << std::endl;
 
    // 使用 sputn() 寫入二進制數(shù)據(jù)
    int num = 42;
    fb.sputn(reinterpret_cast<char*>(&num), sizeof(int));
 
    // 關閉文件
    fb.close();
 
    // 以讀取模式打開文件
    fb.open("myfile.txt", std::ios::in);
    if (!fb.is_open())
    {
    // 打開文件失敗
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 將文件緩沖區(qū)關聯(lián)到標準輸入流
    std::istream in(&fb);
 
    // 使用標準輸入流讀取字符串
    std::string s;
    in >> s;
    std::cout << s << std::endl;
 
    // 使用 sgetn() 讀取二進制數(shù)據(jù)
    fb.sgetn(reinterpret_cast<char*>(&num), sizeof(int));
    std::cout << num << std::endl;
 
// 關閉文件
    fb.close();
 
    return 0;
}

在這個代碼示例中,我們首先使用 filebuf 對象以寫入模式打開了一個文件,然后將文件緩沖區(qū)關聯(lián)到標準輸出流,使用標準輸出流寫入字符串,使用 sputn() 寫入了二進制數(shù)據(jù),最后使用 close() 關閉了文件。然后,我們使用 filebuf 對象以讀取模式打開了同一個文件,將文件緩沖區(qū)關聯(lián)到標準輸入流,使用標準輸入流讀取字符串,使用 sgetn() 讀取了二進制數(shù)據(jù),最后使用 close() 關閉了文件。 請注意,當使用 sputn() 寫入二進制數(shù)據(jù)時,我們需要將要寫入的數(shù)據(jù)的指針轉(zhuǎn)換為 char* 類型,并提供每個數(shù)據(jù)單元的大小和要寫入的數(shù)據(jù)單元數(shù)。當使用 sgetn() 讀取二進制數(shù)據(jù)時,我們也需要將要讀取的數(shù)據(jù)的指針轉(zhuǎn)換為 char* 類型,并提供每個數(shù)據(jù)單元的大小和要讀取的數(shù)據(jù)單元數(shù)。希望這些代碼示例能幫助您理解 C++ 中的文件輸入/輸出流的使用方法。

三、文件輸入/輸出流迭代器

你是不是曾經(jīng)有這樣的煩惱,想將數(shù)組或者一堆類型一樣的數(shù)據(jù)寫入文件,for循環(huán)太麻煩。其實,要想簡單有個前提,就是你的數(shù)據(jù)支持迭代器,例如vector這種類型,C++內(nèi)部對其實現(xiàn)了迭代功能(iterator),那么將數(shù)據(jù)一個一個寫入非常方便。

在使用文件輸入/輸出流迭代器之前,你需要先包含下面的頭文件:

#include <fstream>
#include <iterator>

然后,你可以使用下面的代碼來寫入數(shù)據(jù)到文件,這段代碼會將 data 中的數(shù)據(jù)寫入到文件 "output.txt" 中,并在每個數(shù)據(jù)之間添加一個空格:

std::ofstream out_file("output.txt");
std::ostream_iterator<int> out_iter(out_file, " ");
 
std::vector<int> data = {1, 2, 3, 4, 5};
std::copy(data.begin(), data.end(), out_iter);
 
out_file.close();

讀取文件中的數(shù)據(jù)也很簡單,可以使用下面的代碼,這段代碼會從文件 "input.txt" 中讀取數(shù)據(jù),并將數(shù)據(jù)存儲在 vector 中。文件輸入/輸出流迭代器很方便,因為它們可以像使用普通迭代器一樣使用,可以很容易地編寫模板代碼。

四、C++ 中的文件輸入/輸出流緩沖區(qū)

首先,你需要包含下面的頭文件:

#include <fstream>
#include <iostream>

接下來,你可以使用下面的代碼來寫入數(shù)據(jù)到文件:

std::ofstream out_file("output.txt");
std::streambuf* buf = out_file.rdbuf();
 
int data = 123;
buf->sputn((char*)&data, sizeof(int));
 
out_file.close();

上面這段代碼會將數(shù)據(jù) 123 寫入到文件 "output.txt" 中。

讀取文件中的數(shù)據(jù)也很簡單,可以使用下面的代碼:

std::ifstream in_file("input.txt");
std::streambuf* buf = in_file.rdbuf();
 
int data;
buf->sgetn((char*)&data, sizeof(int));
 
in_file.close();

上面這段代碼會從文件 "input.txt" 中讀取一個整數(shù),并將它存儲在變量 data 中。

使用文件輸入/輸出流緩沖區(qū)可以直接操縱底層文件描述符,這使得你可以實現(xiàn)更底層的文件操作。但是,這也意味著你需要自己處理底層細節(jié),比如字節(jié)序轉(zhuǎn)換等等小問題。

五、C++ 中的文件輸入/輸出流預定義的操縱符

頭文件:

#include <fstream>
#include <iostream>

接下來,你可以使用下面的代碼來寫入數(shù)據(jù)到文件,這段代碼會將數(shù)據(jù) 123 寫入到文件 "output.txt" 中,并在末尾添加一個換行符。

std::ofstream out_file("output.txt");
 
int data = 123;
out_file << data << std::endl;
 
out_file.close();

你也可以使用 std::flush 操縱符來立即刷新文件輸出緩沖區(qū),例如:

std::ofstream out_file("output.txt");
 
int data = 123;
out_file << data << std::flush;
 
out_file.close();

這段代碼會將數(shù)據(jù) 123 寫入到文件 "output.txt" 中,并立即刷新文件輸出緩沖區(qū)。

這種方法實在喜歡不起來,搞不懂他在干什么,有大神來給我解答一下吧。

六、windows api

windows api寫和讀之前的博客有寫過,先CreateFile然后ReadFile、WriteFile。這個會帶來寬字符問題,具體原因尚不清楚,慎用。貼個鏈接吧。

C++文件相關函數(shù)CreateFile|ReadFile|WriteFile用法詳解

以上就是C++實現(xiàn)將內(nèi)容寫入文件的方法總結(jié)的詳細內(nèi)容,更多關于C++將內(nèi)容寫入文件的資料請關注腳本之家其它相關文章!

相關文章

  • C語言程序設計之指針的應用詳解

    C語言程序設計之指針的應用詳解

    為了讓大家能夠更準確的了解C語言中指針的使用,本文為大家準備了四個指針相關的例題,文中的示例代碼講解詳細,感興趣的小伙伴可以學習一下
    2022-11-11
  • c語言在控制臺判定鼠標左鍵的小例子

    c語言在控制臺判定鼠標左鍵的小例子

    c語言在控制臺判定鼠標左鍵的小例子,需要的朋友可以參考一下
    2013-06-06
  • VC基于ADO技術訪問數(shù)據(jù)庫的方法

    VC基于ADO技術訪問數(shù)據(jù)庫的方法

    這篇文章主要介紹了VC基于ADO技術訪問數(shù)據(jù)庫的方法,較為詳細的分析了VC使用ADO操作數(shù)據(jù)庫的相關實現(xiàn)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-10-10
  • C/C++在VScode中的配置教程詳解

    C/C++在VScode中的配置教程詳解

    這篇文章主要介紹了C/C++在VScode中的配置教程詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • C語言Iniparser庫實現(xiàn)ini文件讀寫

    C語言Iniparser庫實現(xiàn)ini文件讀寫

    iniparser是針對INI文件的解析器。ini文件則是一些系統(tǒng)或者軟件的配置文件。本文就來介紹一下如何利用Iniparser庫實現(xiàn)ini文件讀寫吧
    2023-03-03
  • c++詳細講解構(gòu)造函數(shù)的拷貝流程

    c++詳細講解構(gòu)造函數(shù)的拷貝流程

    拷貝構(gòu)造函數(shù)是一種特殊的構(gòu)造函數(shù),它在創(chuàng)建對象時,是使用同一類中之前創(chuàng)建的對象來初始化新創(chuàng)建的對象??截悩?gòu)造函數(shù)通常用于:通過使用另一個同類型的對象來初始化新創(chuàng)建的對象。?復制對象把它作為參數(shù)傳遞給函數(shù)。復制對象,并從函數(shù)返回這個對象
    2022-05-05
  • Qt數(shù)據(jù)庫應用之實現(xiàn)通用數(shù)據(jù)庫采集

    Qt數(shù)據(jù)庫應用之實現(xiàn)通用數(shù)據(jù)庫采集

    這篇文章主要為大家介紹了Qt中是如何實現(xiàn)通用數(shù)據(jù)庫采集的,文中的示例代碼講解詳細,對我們學習Qt有一定幫助,感興趣的小伙伴可以了解一下
    2022-03-03
  • C語言字符串數(shù)組詳解

    C語言字符串數(shù)組詳解

    這篇文章主要介紹了C語言字符串數(shù)組詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 解讀C++編程中派生類的構(gòu)成和創(chuàng)建

    解讀C++編程中派生類的構(gòu)成和創(chuàng)建

    這篇文章主要介紹了解讀C++編程中派生類的構(gòu)成和創(chuàng)建,是C++入門學習中的基礎知識,需要的朋友可以參考下
    2015-09-09
  • 使用C++實現(xiàn)順序鏈表

    使用C++實現(xiàn)順序鏈表

    今天小編就為大家分享一篇關于使用C++實現(xiàn)順序鏈表,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12

最新評論