首頁 > 後端開發 > C++ > 主體

如何在 C 中高效地將整個文件讀入字串?

Susan Sarandon
發布: 2024-10-30 11:17:02
原創
441 人瀏覽過

How to Read an Entire File into a String Efficiently in C  ?

在C 中高效地將文件內容讀取到字符串中

與Perl 等腳本語言類似,能夠檢索內容是有利的整個檔案並將其儲存在C 中的單一變數中。這可以簡化程式碼並提高效能。在這篇文章中,我們將探索實現此目標的最有效方法。

C 中的傳統方法是使用 std::ifstream 和 std::getline() 函數。然而,這需要逐行迭代地讀取文件,這對於大文件來說效率很低。

更有效的解決方案是利用 std::istreambuf_iterator 類別。此類別提供了流內容的迭代器接口,允許我們在單一操作中將整個流讀入字串中。

以下是示範此方法的範例程式碼:

<code class="cpp">#include <fstream>
#include <string>

int main(int argc, char** argv) {
  std::ifstream ifs("myfile.txt");
  std::string content((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
  return 0;
}</code>
登入後複製

在此程式碼中,內容變數使用檔案「myfile.txt」的內容進行初始化。 (std::istreambuf_iterator(ifs)) 表達式建立一個讀取檔案內容的輸入迭代器,而 (std::istreambuf_iterator()) 表達式建立一個結束迭代器來標記檔案結尾。然後呼叫 allocate 函數將輸入迭代器的內容複製到內容字串中。

或者,您可以直接使用content.assign 方法,而無需建立臨時字串變量,如下所示:

<code class="cpp">std::ifstream ifs("myfile.txt");
std::string content;
content.assign((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));</code>
登入後複製

這種最佳化方法避免了逐行迭代讀取文件的開銷,使其效率顯著提高,尤其是對於大文件。

以上是如何在 C 中高效地將整個文件讀入字串?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!