一、tell過去式
tell是一個C++中的流函數,在文件的讀取和寫入中使用較為頻繁。而tellg則是一個成員函數,其返回當前讀指針在讀文件流中的位置,同時它還可以被用來移動文件讀指針到文件流的任意位置。對於tellg可以進行以下簡單的使用。
ifstream input_file("read.txt");
input_file.seekg(0, ios::beg);
cout << "The position of get pointer before reading is: " << input_file.tellg() << endl;
getline(input_file, read_buffer);
cout << "The position of get pointer after reading is: " << input_file.tellg() << endl;
這段代碼中,我們打開了一個名為read.txt的文件並設置讀取指針的開始位置為文件開頭,緊接着我們使用了getline函數讀入了文件的一行,其中讀取指針的當前位置通過tellg函數得到並打印。
二、tell過去式過去分詞
除了我們熟知的tellg之外,還有兩個和它類似的成員函數:tellp和tellb,它們分別返回寫指針和讀寫指針在文件流中的位置,這裡不再贅述。此處我們注意區分一下它們過去式的形式:
- tellg的過去式為toldg
- tellp的過去式為toldp
- tellb的過去式為toldb
這樣設計的目的是讓讀者在代碼中區分開不同類型的指針函數。
三、tell過去分詞
tell函數的過去分詞為told,它指的是文件流當前的位置,不依賴與讀指針和寫指針,因此也不需要使用到輸入輸出流的操作符。使用told時我們需要打開二進制文件,並使用ifstream和ofstream的read和write函數來進行文件流的IO操作。
char write_buffer[100];
ifstream read_file("read.txt");
read_file.seekg(0, ios::beg);
ofstream write_file("write.bin", ios::binary | ios::out );
int file_size = 0;
read_file.read(write_buffer, 100);
while(!read_file.eof())
{
file_size += read_file.gcount();
write_file.write(write_buffer, read_file.gcount());
read_file.read(write_buffer, 100);
}
cout << "File size is: " << file_size << endl;
read_file.close();
write_file.close();
這段代碼中,我們打開名為read.txt的文件,並設置讀指針為其開始位置。我們然後通過write函數給名為write.bin的文件寫入這100個位元組的數據,隨後我們使用gcount函數找出實際讀入到read_buffer中的字符數,並將文件的大小設置為file_size。在循環結束後關閉文件讀寫流。
四、tell過去+
tellg過去+是telling,它指的是讀操作完成後,讀取指針的位置。telling的用法和toldg大同小異:
ifstream input_file("read.txt");
input_file.seekg(0, ios::beg);
cout << input_file.rdbuf();
cout << "The position of get pointer after reading is: " << input_file.tellg() << endl;
cout << "The position of get pointer after reading is: " << input_file.telling() << endl;
這段代碼中,我們通過rdbuf函數將文件全部讀進內存中,此時讀指針會自動到達文件結尾,我們緊接着輸出讀取指針的位置,並使用telling函數輸出讀取指針的位置。注意在輸出完rdbuf之後,reading的位置並不是文件的末尾,因為我們讀取了文件中的全部內容。
五、tell官網
tellg的詳細描述可以在C++官網上找到,網址為:
https://zh.cppreference.com/w/cpp/io/basic_istream/tellg
六、tell改一個字母變成另一個詞
如果我們將tell中l的位置從g後移一個字母,得到tellh,它其實並沒有什麼特殊的意義。同時,這個單詞在搜索引擎中一般被誤認為是tellg。
七、tell官方下載
由於tellg是C++標準庫函數之一,因此並不存在所謂的官方可供下載的版本,相關的庫文件已經和C++編譯器捆綁在一起。如果你正在使用的編譯器是Visual Studio或者CodeBlocks,那麼你已經擁有了tellg的使用權限。
八、tell過分
tellg是一個非常基礎的C++函數,我們在讀寫文件流的時候總是會用到它。因此,我們建議讀者多多利用官方文檔和相關參考資料來理解tellg在文件流讀取中的作用和用法,掌握好文件讀寫流的操作。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/182347.html
微信掃一掃
支付寶掃一掃