2
文件的大小,我有以下塊測試seekg和所以tellg的行爲,當我試圖得到一個文件大小:得到與ifstream的:: seekg和所以tellg
int size = 0;
ifstream in(fileName.c_str(), ifstream::in | ifstream::binary);
if(in)
{
in.seekg(0,ifstream::end);
size = in.tellg();
cout << endl;
cout << endl;
cout << "********** size stream1*** =" << size << endl;
in.seekg(0,ios::end);
size = in.tellg();
cout << "********** size stream2*** =" << size << endl;
in.seekg(0,ios::end);
size = in.tellg();
cout << "********** size stream3*** =" << size << endl;
in.seekg(100,ios::end);
size = in.tellg();
cout << "********** size stream4*** =" << size << endl;
in.seekg(0,ios::beg);
size = in.tellg();
cout << "********** size stream5*** =" << size << endl;
in.seekg(100);
in.seekg(0, ios::end);
size = in.tellg();
cout << "********** size stream6*** =" << size << endl;
in.seekg(100);
in.seekg(0, ios::cur);
size = in.tellg();
cout << "********** size stream7*** =" << size << endl;
in.seekg(-100,ios::end);
size = in.tellg();
cout << "********** size stream8*** =" << size << endl;
in.seekg(ios::beg,ios::end);
size = in.tellg();
cout << "********** size stream9*** =" << size << endl;
in.seekg(ios::beg);
in.seekg(ios::end);
size = in.tellg();
cout << "********** size stream10*** =" << size << endl;
cout << endl;
cout << endl;
}
其結果如下:
********** size stream1*** =1846
********** size stream2*** =1846
********** size stream3*** =1846
********** size stream4*** =1946
********** size stream5*** =0
********** size stream6*** =1846
********** size stream7*** =100
********** size stream8*** =1746
********** size stream9*** =1846
********** size stream10*** =2
我的問題有以下幾點:
- 做的所以tellg將返回字節ŧ他最後seekg找到了?
- 爲什麼stream5結果是0?它以前的位置是在文件的末尾。
- seekg將始終從文件開頭處開始,如stream5所示?
- seekg不能倒退如stream5所示?
- seekg的第一個參數是什麼意思?它表示這是第二個參數的偏移量。它看起來超出了第二個參數指定的位置,如果它是一個正值,如stream4中所示。
- 如果我想知道前100個字節後的大小,我必須使用-100,如stream8?
- 爲什麼stream10是2?
- seekp和tellp在ofstream的有屬性seekg和所以tellg在這裏?
tellg返回文件的當前位置。 **閱讀手冊頁**順便說一句,你只有一個流。 –
你調用in.seekg(0,ios :: beg);在stream5之前。爲什麼它不是0? – cen
也爲6,爲什麼不簡單地得到完整的大小和減去100?如果文件低於100字節,則可以將該位置設置在流開始位置的下方。我測試了這一點,併爲一個較小的文件返回大小爲-1,我相信是故障位錯誤集。 – cen