51Testing软件测试论坛

标题: C++中stream流的问题? [打印本页]

作者: viliv715    时间: 2012-11-28 11:56
标题: C++中stream流的问题?
  1. void LogInfo::SaveFile(bool bPrompt)
  2. {
  3.     char caFileCurrent[512];
  4.     sprintf(caFileCurrent, "%s_%s%d.log", g_caFileName, sExeName_.c_str(), 0);
  5.     struct _stat st;
  6.     if(_stat(caFileCurrent, &st) >= 0 && st.st_size > (g_iLogSize * 1024 * 1024))
  7.     {
  8.         char caFileNew[512], caFileOld[512];
  9.         sprintf(caFileOld, "%s_%s%d.log", g_caFileName, sExeName_.c_str(), g_iLogNum);
  10.         if(_stat(caFileOld, &st) >= 0)
  11.             remove(caFileOld);
  12.         for(int k = g_iLogNum; k > 0; k--)
  13.         {
  14.             sprintf(caFileOld, "%s_%s%d.log", g_caFileName, sExeName_.c_str(), k);
  15.             sprintf(caFileNew, "%s_%s%d.log", g_caFileName, sExeName_.c_str(), k - 1);
  16.             if(_stat(caFileNew, &st) >= 0)
  17.                 rename(caFileNew, caFileOld);
  18.         }
  19.     }
  20.      
  21.     [color=Blue]ofstream of(caFileCurrent, ios::out | ios::app);[/color]
  22.      
  23.    [color=Red] if(!of)[/color]
  24.     {
  25.         AfxMessageBox("不能打开文件");
  26.     }
  27.     else
  28.     {
  29.         of <<  Message();
  30.         AfxMessageBox("保存成功");
  31.     }
  32. }
复制代码
在上面的这段代码中,标红的if判断怎么控制执行分歧的全面覆盖。是不是说我给caFileCurrent初期值是本机存在的路径,of的返回值就为非空,如果给一个本机不存在的路径就返回为空值?如果是这样的话,caFileCurrent是一个局部变量,我怎么能直接给局部变量赋值(测试软件中可以给全局变量,被调函数的返回值进行直接赋值,全局变量不可以)进行判断?如果不是的话又该怎么控制?我用的是C++test软件。先谢谢大家了。
作者: 六月天    时间: 2012-11-28 22:15
汗,看清楚代码啊。
caFileCurrent是通过g_caFileName字符串、sExeName_.c_str()函数、再加一个数字0来赋值的:
sprintf(caFileCurrent, "%s_%s%d.log", g_caFileName, sExeName_.c_str(), 0);
所以你要看下哪里可以给g_caFileName赋值就行了
作者: viliv715    时间: 2012-11-29 09:28
汗,看清楚代码啊。
caFileCurrent是通过g_caFileName字符串、sExeName_.c_str()函数、再加一个数字0来赋值 ...
六月天 发表于 2012-11-28 22:15

那我只需要给g_caFileName赋值为空,sExeName_.c_str()函数和后面的那个数字0都不管的话,caFileCurrent里面的内容就为空吗?
作者: 六月天    时间: 2012-11-29 17:32
不是caFileCurrent内容为空,是caFileCurrent内容变了。
不过我忘了ios:ut | ios::app如果文件不存在是不是会自动创建,而不报错。
如果是文件不存在就自动创建而不报错的话,那你要走这个分支还真有点麻烦,可以考虑把代码放到只读文件夹里面去运行,让他创建文件失败。
作者: viliv715    时间: 2012-11-30 09:46
不是caFileCurrent内容为空,是caFileCurrent内容变了。
不过我忘了ios:ut | ios::app如果文件不存在是不 ...
六月天 发表于 2012-11-29 17:32

您的意思是说if(!of)的意思不是判断caFileCurrent的内容是否为空,而是判断caFileCurrent的内容是否发生变化?
作者: 六月天    时间: 2012-12-1 12:51

if(!of)是判断文件打开是否成功




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2