51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3325|回复: 5
打印 上一主题 下一主题

[求助] C++中stream流的问题?

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2012-11-28 11:56:28 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
  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软件。先谢谢大家了。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

6#
发表于 2012-12-1 12:51:33 | 只看该作者

if(!of)是判断文件打开是否成功
回复 支持 反对

使用道具 举报

该用户从未签到

5#
 楼主| 发表于 2012-11-30 09:46:11 | 只看该作者
不是caFileCurrent内容为空,是caFileCurrent内容变了。
不过我忘了ios:ut | ios::app如果文件不存在是不 ...
六月天 发表于 2012-11-29 17:32

您的意思是说if(!of)的意思不是判断caFileCurrent的内容是否为空,而是判断caFileCurrent的内容是否发生变化?
回复 支持 反对

使用道具 举报

该用户从未签到

4#
发表于 2012-11-29 17:32:38 | 只看该作者
不是caFileCurrent内容为空,是caFileCurrent内容变了。
不过我忘了ios:ut | ios::app如果文件不存在是不是会自动创建,而不报错。
如果是文件不存在就自动创建而不报错的话,那你要走这个分支还真有点麻烦,可以考虑把代码放到只读文件夹里面去运行,让他创建文件失败。
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2012-11-29 09:28:21 | 只看该作者
汗,看清楚代码啊。
caFileCurrent是通过g_caFileName字符串、sExeName_.c_str()函数、再加一个数字0来赋值 ...
六月天 发表于 2012-11-28 22:15

那我只需要给g_caFileName赋值为空,sExeName_.c_str()函数和后面的那个数字0都不管的话,caFileCurrent里面的内容就为空吗?
回复 支持 反对

使用道具 举报

该用户从未签到

2#
发表于 2012-11-28 22:15:36 | 只看该作者
汗,看清楚代码啊。
caFileCurrent是通过g_caFileName字符串、sExeName_.c_str()函数、再加一个数字0来赋值的:
sprintf(caFileCurrent, "%s_%s%d.log", g_caFileName, sExeName_.c_str(), 0);
所以你要看下哪里可以给g_caFileName赋值就行了
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-16 07:37 , Processed in 0.081072 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表