为什么这段代码总是返回文件大小为零?

Moj*_*kht 3 c++ binary fstream file operation

为什么,当我使用下面的代码片段的结果是零,无论文件大小,但是当我删除ios::binaryopen()它做什么,它应该做的?

fstream f1;    
streampos begin, end;
f1.open("file1", ios::binary);
f1.seekg(0, ios::beg);
begin = f1.tellg();
f1.seekg(0, ios::end);
end = f1.tellg();
f1.close();
cout << end - begin << endl;
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 8

我假设"当我删除ios::binary"时你的意思是删除整个论点:

f1.open("file1");
Run Code Online (Sandbox Code Playgroud)

该函数open()有两个参数 - 文件名和模式.模式一的默认参数为std::ios_base::in | std::ios_base::out.因此,如果您没有指定任何内容,则会使用此deault.

ios::binary但是,如果指定,则替换默认参数.既然你既in没有指定也没有out,则open()呼叫失败.把一个if()周围open()会告诉你-还记得你应该总是检查错误与I/O.