[英]File reading in C++ and eof
如果我正在用c ++讀取這樣的文件:
//Begin to read a file
FILE *f = fopen("vids/18.dat", "rb");
fseek(f, 0, SEEK_END);
long pos = ftell(f);
fseek(f, 0, SEEK_SET);
char *m_sendingStream = (char*)malloc(pos);
fread(m_sendingStream, pos, 1, f);
fclose(f);
//Finish reading a file
我先問了兩個問題:這是讀取整個文件嗎? (我希望它這樣做),第二,如何創建一個持續到文件結尾的時間? 我有:
while(i < sizeof(m_sendingStream))
但我不確定這是否有效,我一直在閱讀(我以前從未用c ++編程)我認為我可以使用eof()
但顯然這是不好的做法。
從文件中讀取時不需要循環,因為您可以一次性獲取代碼的全部內容。 您當然應該記錄並檢查返回值,當然:
size_t const n = fread(buf, pos /*bytes in a record*/, 1 /*max number of records to read*/, f);
if (n != 1) { /* error! */ }
您還可以編寫一個循環,直到文件末尾讀取而不事先知道文件大小(例如從管道或增長文件中讀取):
#define CHUNKSIZE 65536
char * buf = malloc(CHUNKSIZE);
{
size_t n = 0, r = 0;
while ((r = fread(buf + n, 1 /*bytes in a record*/, CHUNKSIZE /*max records*/, f)) != 0)
{
n += r;
char * tmp = realloc(buf, n + CHUNKSIZE);
if (tmp) { buf = tmp; }
else { /* big fatal error */ }
}
if (!feof(f))
{
perror("Error reading file");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.