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

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

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

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

使用 C 的文件 I/O 函數(shù),例如 fopen(),fprintf(),fputs() 和 fwrite() 等。這些函數(shù)由 C 語(yǔ)言中的標(biāo)準(zhǔn)庫(kù) 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() 寫入二進(jìn)制數(shù)據(jù)
    int num = 42;
    fwrite(&num, sizeof(int), 1, fp);
 
    // 關(guān)閉文件
    fclose(fp);
 
    return 0;
}

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

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

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

下面是使用 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() 寫入二進(jìn)制數(shù)據(jù)
    int num = 42;
    out.write(reinterpret_cast<char*>(&num), sizeof(int));
 
    // 關(guān)閉文件
    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() 讀取二進(jìn)制數(shù)據(jù)
    in.read(reinterpret_cast<char*>(&num), sizeof(int));
    std::cout << num << std::endl;
 
    // 關(guān)閉文件
    in.close();
 
    return 0;
}

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

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

另一個(gè) C++ 標(biāo)準(zhǔn)庫(kù)中的文件輸入/輸出流類型叫做 filebuf,它可以通過(guò)標(biāo)準(zhǔn)輸入/輸出流來(lái)讀寫文件。例如,下面是使用 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ū)關(guān)聯(lián)到標(biāo)準(zhǔn)輸出流
    std::ostream out(&fb);
 
    // 使用標(biāo)準(zhǔn)輸出流寫入字符串
    out << "Hello, world!" << std::endl;
    out << "This is another string." << std::endl;
 
    // 使用 sputn() 寫入二進(jìn)制數(shù)據(jù)
    int num = 42;
    fb.sputn(reinterpret_cast<char*>(&num), sizeof(int));
 
    // 關(guān)閉文件
    fb.close();
 
    // 以讀取模式打開文件
    fb.open("myfile.txt", std::ios::in);
    if (!fb.is_open())
    {
    // 打開文件失敗
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }
 
    // 將文件緩沖區(qū)關(guān)聯(lián)到標(biāo)準(zhǔn)輸入流
    std::istream in(&fb);
 
    // 使用標(biāo)準(zhǔn)輸入流讀取字符串
    std::string s;
    in >> s;
    std::cout << s << std::endl;
 
    // 使用 sgetn() 讀取二進(jìn)制數(shù)據(jù)
    fb.sgetn(reinterpret_cast<char*>(&num), sizeof(int));
    std::cout << num << std::endl;
 
// 關(guān)閉文件
    fb.close();
 
    return 0;
}

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

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

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

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

#include <fstream>
#include <iterator>

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

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ù)也很簡(jiǎn)單,可以使用下面的代碼,這段代碼會(huì)從文件 "input.txt" 中讀取數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)在 vector 中。文件輸入/輸出流迭代器很方便,因?yàn)樗鼈兛梢韵袷褂闷胀ǖ饕粯邮褂?,可以很容易地編寫模板代碼。

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

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

#include <fstream>
#include <iostream>

接下來(lái),你可以使用下面的代碼來(lái)寫入數(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();

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

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

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

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

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

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

頭文件:

#include <fstream>
#include <iostream>

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

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

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

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

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

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

六、windows api

windows api寫和讀之前的博客有寫過(guò),先CreateFile然后ReadFile、WriteFile。這個(gè)會(huì)帶來(lái)寬字符問(wèn)題,具體原因尚不清楚,慎用。貼個(gè)鏈接吧。

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

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

相關(guān)文章

  • C語(yǔ)言程序設(shè)計(jì)之指針的應(yīng)用詳解

    C語(yǔ)言程序設(shè)計(jì)之指針的應(yīng)用詳解

    為了讓大家能夠更準(zhǔn)確的了解C語(yǔ)言中指針的使用,本文為大家準(zhǔn)備了四個(gè)指針相關(guān)的例題,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以學(xué)習(xí)一下
    2022-11-11
  • c語(yǔ)言在控制臺(tái)判定鼠標(biāo)左鍵的小例子

    c語(yǔ)言在控制臺(tái)判定鼠標(biāo)左鍵的小例子

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

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

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

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

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

    C語(yǔ)言Iniparser庫(kù)實(shí)現(xiàn)ini文件讀寫

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

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

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

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

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

    C語(yǔ)言字符串?dāng)?shù)組詳解

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

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

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

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

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

最新評(píng)論