您好,登錄后才能下訂單哦!
這篇文章主要介紹“C++怎么實現將內容寫入文件”,在日常操作中,相信很多人在C++怎么實現將內容寫入文件問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++怎么實現將內容寫入文件”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
使用 C 的文件 I/O 函數,例如 fopen(),fprintf(),fputs() 和 fwrite() 等。這些函數由 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() 寫入二進制數據 int num = 42; fwrite(&num, sizeof(int), 1, fp); // 關閉文件 fclose(fp); return 0; }
在這個代碼示例中,我們首先使用 fopen() 函數以寫入模式打開了一個文件,然后使用 fprintf(),fputs() 和 fwrite() 向文件寫入了字符串和二進制數據,最后使用 fclose() 函數關閉了文件。請注意,在使用 fwrite() 函數寫入二進制數據時,我們需要提供要寫入的數據的指針,以及每個數據單元的大小和要寫入的數據單元數。
此種是C++標準的輸入輸出,一般不會帶來字符種類不同引發的問題,比如寬字節和窄字節之間的區別,肯能我們打開文件內容都一樣,但是涉及加密、編碼等操作寬窄字符是有區別的,這個是有教訓的,牢記。
下面是使用 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() 寫入二進制數據 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() 讀取二進制數據 in.read(reinterpret_cast<char*>(&num), sizeof(int)); std::cout << num << std::endl; // 關閉文件 in.close(); return 0; }
在這個代碼示例中,我們首先使用 ofstream 對象以寫入模式打開了一個文件,然后使用流操作符 << 向文件寫入了字符串,使用 write() 寫入了二進制數據,最后使用 close() 關閉了文件。然后,我們使用 ifstream 對象以讀取模式打開了同一個文件,使用流操作符 >> 讀取了字符串,使用 read()讀取了二進制數據,最后使用 close() 關閉了文件。
請注意,當使用 write() 寫入二進制數據時,我們需要將要寫入的數據的指針轉換為 char* 類型,并提供每個數據單元的大小和要寫入的數據單元數。當使用 read() 讀取二進制數據時,我們也需要將要讀取的數據的指針轉換為 char* 類型,并提供每個數據單元的大小和要讀取的數據單元數。
另一個 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; } // 將文件緩沖區關聯到標準輸出流 std::ostream out(&fb); // 使用標準輸出流寫入字符串 out << "Hello, world!" << std::endl; out << "This is another string." << std::endl; // 使用 sputn() 寫入二進制數據 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; } // 將文件緩沖區關聯到標準輸入流 std::istream in(&fb); // 使用標準輸入流讀取字符串 std::string s; in >> s; std::cout << s << std::endl; // 使用 sgetn() 讀取二進制數據 fb.sgetn(reinterpret_cast<char*>(&num), sizeof(int)); std::cout << num << std::endl; // 關閉文件 fb.close(); return 0; }
在這個代碼示例中,我們首先使用 filebuf 對象以寫入模式打開了一個文件,然后將文件緩沖區關聯到標準輸出流,使用標準輸出流寫入字符串,使用 sputn() 寫入了二進制數據,最后使用 close() 關閉了文件。然后,我們使用 filebuf 對象以讀取模式打開了同一個文件,將文件緩沖區關聯到標準輸入流,使用標準輸入流讀取字符串,使用 sgetn() 讀取了二進制數據,最后使用 close() 關閉了文件。 請注意,當使用 sputn() 寫入二進制數據時,我們需要將要寫入的數據的指針轉換為 char* 類型,并提供每個數據單元的大小和要寫入的數據單元數。當使用 sgetn() 讀取二進制數據時,我們也需要將要讀取的數據的指針轉換為 char* 類型,并提供每個數據單元的大小和要讀取的數據單元數。希望這些代碼示例能幫助您理解 C++ 中的文件輸入/輸出流的使用方法。
你是不是曾經有這樣的煩惱,想將數組或者一堆類型一樣的數據寫入文件,for循環太麻煩。其實,要想簡單有個前提,就是你的數據支持迭代器,例如vector這種類型,C++內部對其實現了迭代功能(iterator),那么將數據一個一個寫入非常方便。
在使用文件輸入/輸出流迭代器之前,你需要先包含下面的頭文件:
#include <fstream> #include <iterator>
然后,你可以使用下面的代碼來寫入數據到文件,這段代碼會將 data 中的數據寫入到文件 "output.txt" 中,并在每個數據之間添加一個空格:
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();
讀取文件中的數據也很簡單,可以使用下面的代碼,這段代碼會從文件 "input.txt" 中讀取數據,并將數據存儲在 vector 中。文件輸入/輸出流迭代器很方便,因為它們可以像使用普通迭代器一樣使用,可以很容易地編寫模板代碼。
首先,你需要包含下面的頭文件:
#include <fstream> #include <iostream>
接下來,你可以使用下面的代碼來寫入數據到文件:
std::ofstream out_file("output.txt"); std::streambuf* buf = out_file.rdbuf(); int data = 123; buf->sputn((char*)&data, sizeof(int)); out_file.close();
上面這段代碼會將數據 123 寫入到文件 "output.txt" 中。
讀取文件中的數據也很簡單,可以使用下面的代碼:
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" 中讀取一個整數,并將它存儲在變量 data 中。
使用文件輸入/輸出流緩沖區可以直接操縱底層文件描述符,這使得你可以實現更底層的文件操作。但是,這也意味著你需要自己處理底層細節,比如字節序轉換等等小問題。
頭文件:
#include <fstream> #include <iostream>
接下來,你可以使用下面的代碼來寫入數據到文件,這段代碼會將數據 123 寫入到文件 "output.txt" 中,并在末尾添加一個換行符。
std::ofstream out_file("output.txt"); int data = 123; out_file << data << std::endl; out_file.close();
你也可以使用 std::flush 操縱符來立即刷新文件輸出緩沖區,例如:
std::ofstream out_file("output.txt"); int data = 123; out_file << data << std::flush; out_file.close();
這段代碼會將數據 123 寫入到文件 "output.txt" 中,并立即刷新文件輸出緩沖區。
到此,關于“C++怎么實現將內容寫入文件”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。