istream失败的原因

langyoutianxia 2010-04-12 05:55:24
int iCount = 0;
const int SHAW_MAX_BUF=5242880;
char *pBuf = new char[SHAW_MAX_BUF];
if (VOS_PTR_NULL == pBuf)
{
return LOG_UTIL_IO_MALLOC_FAIL;
}

memset(pBuf , SHAW_MAX_BUF, 0);
ifstream isFile(szSrcPath);
ofstream osFile(szDstPath);

//
if (!isFile) //请问各位高手这里失败的原因通常有哪些?
{
delete []pBuf;
isFile.clear();
return -1;
}
if (!osFile)
{
delete []pBuf;
osFile.clear();
return -1;
}
while (isFile.read(pBuf,SHAW_MAX_BUF))
{
iCount = isFile.gcount();
osFile.write(pBuf,iCount);
}
iCount = isFile.gcount();
osFile.write(pBuf,iCount);

//关闭与输入输出文件流相关联的句柄
isFile.close();
osFile.close();

delete []pBuf;
return 0;
...全文
223 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
langyoutianxia 2010-04-15
  • 打赏
  • 举报
回复
错误原因打不出来啊,只知道 ifstream isFile(szSrcPath);失败
langyoutianxia 2010-04-15
  • 打赏
  • 举报
回复
这是Linux下的程序,是Linux下的路径形式/
only_delusion 2010-04-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 langyoutianxia 的回复:]
int iCount = 0;
const int SHAW_MAX_BUF=5242880;
char *pBuf = new char[SHAW_MAX_BUF];
if (VOS_PTR_NULL == pBuf)
{
return LOG_UTIL_IO_MALLOC_FAIL;
}

memset(pBuf , SHAW_MAX_BUF, 0);
……
[/Quote]

你的ifstream isFile(szSrcPath);中的szSrcPath是什么格式的?? 例如C:\text.txt 你改成双划线看看 C:\\text.text 用 szSrcPath.repalce("\\","\\\\");转换下看看
arong1234 2010-04-14
  • 打赏
  • 举报
回复
这个错误信息是谁打印出来的?打印的时候为什么不在代码里诊断一下错误原因?这样的错误信息毫无用处,根本不可能知道原因是什么
langyoutianxia 2010-04-13
  • 打赏
  • 举报
回复
copyFile(const char *szSrcPath, const char *szDstPath)
{
int iCount = 0;
const int SHAW_MAX_BUF=5242880;
char *pBuf = new char[SHAW_MAX_BUF];
if (VOS_PTR_NULL == pBuf)
{
return LOG_UTIL_IO_MALLOC_FAIL;
}

memset(pBuf , SHAW_MAX_BUF, 0);
ifstream isFile(szSrcPath);
ofstream osFile(szDstPath);

//
if (!isFile)
{
delete []pBuf;
isFile.clear();
return -1;
}
if (!osFile)
{
delete []pBuf;
osFile.clear();
return -1;
}
while (isFile.read(pBuf,SHAW_MAX_BUF))
{
iCount = isFile.gcount();
osFile.write(pBuf,iCount);
}
iCount = isFile.gcount();
osFile.write(pBuf,iCount);

//¹Ø±ÕÓëÊäÈëÊä³öÎļþÁ÷Ïà¹ØÁªµÄ¾ä±ú
isFile.close();
osFile.close();

delete []pBuf;
return 0;
}
文件的路劲是正确的,文件也存在,前面有一些文件能够copy成功,但是超过200M的文件就不能copy成功了
[MESSAGE]Copy file fail: from/home/auditsss/xxxxxx2.0.0/log_file/log_collect/20100412_0000000149.tar.gz to /home/auditxxx/xxxxxx2.0.0/C_SOURCE1.7/src/log/logxxx/auditxxxxx/tmp/ap/collectdest/20100412_0000000149.tar.gz
arong1234 2010-04-12
  • 打赏
  • 举报
回复
他不是已经!isFile了么?干吗要is_open判断?打开以后stream进入异常状态,他的文件怎么可能已经打开?[Quote=引用 3 楼 ypb362148418 的回复:]
你把代码贴完,isFile.is_open()判断文件是否打开 使用看看
[/Quote]
ypb362148418 2010-04-12
  • 打赏
  • 举报
回复
你把代码贴完,isFile.is_open()判断文件是否打开 使用看看
bitxinhai 2010-04-12
  • 打赏
  • 举报
回复
szSrcPath路径不正确
文件不存在
文件名错误等

还有判断文件打开
最好使用
isFile.is_open()判断文件是否打开
tan870426 2010-04-12
  • 打赏
  • 举报
回复
路径正确不?
文件名对不?
windows下路径要用双"//"

64,686

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧