首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

fstream不指定std:ios:in跟std:ios:out也能读写?

2013-03-27 
fstream不指定std::ios::in和std::ios::out也能读写???不指定std::ios::in和std::ios::out也能读写???std:

fstream不指定std::ios::in和std::ios::out也能读写???
不指定std::ios::in和std::ios::out也能读写???


std::fstream LoadFile;
LoadFile.open ( "C:\\3V.txt", std::ios::binary | std::ios::_Nocreate );

read可以正常读取数据,何解?
[解决办法]
5#没有回答到点上。
这种问题,必须拿出源代码才能让人信服。

template <typename CharT> FILE * _Xfiopen(const CharT *filename,
ios_base::openmode mode, int prot)
{
static const int valid[] =
{// valid combinations of open flags
ios_base::in,
ios_base::out,
ios_base::out 
[解决办法]
 ios_base::trunc,
ios_base::out 
[解决办法]
 ios_base::app,
ios_base::in 
[解决办法]
 ios_base::binary,
ios_base::out 
[解决办法]
 ios_base::binary,
ios_base::out 
[解决办法]
 ios_base::trunc 
[解决办法]
 ios_base::binary,
ios_base::out 
[解决办法]
 ios_base::app 
[解决办法]
 ios_base::binary,
ios_base::in 
[解决办法]
 ios_base::out,
ios_base::in 
[解决办法]
 ios_base::out 
[解决办法]
 ios_base::trunc,
ios_base::in 
[解决办法]
 ios_base::out 
[解决办法]
 ios_base::app,
ios_base::in 
[解决办法]
 ios_base::out 
[解决办法]
 ios_base::binary,
ios_base::in 
[解决办法]
 ios_base::out 
[解决办法]
 ios_base::trunc

[解决办法]
 ios_base::binary,
ios_base::in 
[解决办法]
 ios_base::out 
[解决办法]
 ios_base::app

[解决办法]
 ios_base::binary,
0};

FILE *fp = 0;
int n;
ios_base::openmode atendflag = mode & ios_base::ate;
ios_base::openmode norepflag = mode & ios_base::_Noreplace;



        // ===========重点看这里===========
if (mode & ios_base::_Nocreate)
mode 
[解决办法]
= ios_base::in;// file must exist
if (mode & ios_base::app)
mode 
[解决办法]
= ios_base::out;// extension -- app implies out

mode &= ~(ios_base::ate 
[解决办法]
 ios_base::_Nocreate 
[解决办法]
 ios_base::_Noreplace);
for (n = 0; valid[n] != 0 && valid[n] != mode; ++n)
;// look for a valid mode

if (valid[n] == 0)
return (0);// no valid mode
else if (norepflag && (mode & (ios_base::out 
[解决办法]
 ios_base::app))
&& (fp = _Xfsopen(filename, 0, prot)) != 0)
{// file must not exist, close and fail
fclose(fp);
return (0);
}
else if (fp != 0 && fclose(fp) != 0)
return (0);// can't close after test open
else if ((fp = _Xfsopen(filename, n, prot)) == 0)
return (0);// open failed

if (!atendflag 
[解决办法]
 fseek(fp, 0, SEEK_END) == 0)
return (fp);// no need to seek to end, or seek succeeded

fclose(fp);// can't position at end
return (0);
}


上面的函数被fstream的open函数间接调用。可以看到,当第二个参数包含ios_base::_Nocreate标志时,会被自动加上ios::in。楼主不必惊奇。

热点排行