对新打开的空文件,流标记是这样设定的:
输入流 ifstream 在文件打开时会自动检测是否可读,如果是空文件则检测失败,自动设定 failbit 标记,但不会设立 eofbit 标记
输出流 ofstream 在文件打开时不检测读操作,因此 failbit 和 eofbit 都不会设定
输入输出流 fstream 与 ifstream 一样也会检测读,因此对空文件来说 failbit 也是 true,但 eofbit 仍是 false
eofbit 只有当读位置处于文件结尾且再次手动读取数据时才会被设定。
当使用 if(fs) 或 if(!fs) 的表达式时,实际上判断了 fstream 的三个错误标记位:failbit eofbit badbit ,只有当三个都未设定时 if(fs) 才返回 true
因此对空文件的 ifstream 或 fstream 可在文件打开后即由 if(fs) 来判断是否可读。
当文件流被设立 ios::failbit 或 ios::eofbit 标记后,后面如果要再次正常使用这个流对象的话,这个标记必须要手动清除掉,不然所有读写动作都变为空操作。
在判断 eof() 或 if(fs) 或 if(!fs) 后用 fs.clear() 清除错误标记,然后 seekp() 到文件开头即可。
那用变量不就行了
char filepath[50];
cout<<"Input file full path:\n";
cin>>filepath;
ofstream fout(filepath);
这个方法要求路径中没有空格,要是有的话,就用cin.get()或者cin.getline()