linux,stat 函数请教

facetosleep 2012-08-04 09:57:34
请教大家:
环境:centos5.2
功能:调用stat 函数获取文件的大小。
问题:需要获取 /mnt/1/2/1001$[1](2001-9-1 2001-9-2).dat 的文件大小,调用stat 如下:

//测试1:
char filefullpath[] = "/mnt/1/2/1001$[1](2001-9-1 2001-9-2).dat" ;
struct stat filestat;
int nRet = stat(filefullpath, &filestat);
printf("nRet %d ,errno %d,fileSize %d \n",nRet,errno,filestat.st_size);//实际输出 nRet = -1, errno :2 ,no such file

//测试2:
struct stat filestat;
int nRet = stat("/mnt/1/2/1001$[1](2001-9-1 2001-9-2).dat" , &filestat);
int nRet = stat(filefullpath, &filestat);
printf("nRet %d ,fileSize %d \n",nRet,filestat.st_size);//输出结果正确

//测试3:
char filefullpath[] = "/mnt/1/2/1001\\$\\[1\\]\\(2001-9-1\\ 2001-9-2\\).dat" ;
struct stat filestat;
int nRet = stat(filefullpath, &filestat);
printf("nRet %d ,fileSize %d \n",nRet,filestat.st_size);//实际输出 nRet = -1, errno :2 ,no such file


上述测试1,3 哪里不对?谢谢



...全文
162 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2012-08-05
  • 打赏
  • 举报
回复
使用相对路径试试
Gloveing 2012-08-05
  • 打赏
  • 举报
回复
路径问题,找不到文件。
Gloveing 2012-08-05
  • 打赏
  • 举报
回复
/mnt/1/2/1001$[1](2001-9-1 2001-9-2).dat 这个是绝对路径吧?
facetosleep 2012-08-05
  • 打赏
  • 举报
回复
to agoago_2009:
1. 使用相对路径测试了,仍提示找不到文件
2. 直接在运行环境下执行 ls -lh /mnt/1/2/1001\$\[1\]\(2001-9-1 2001-9-2\).dat,能够正确获取到相应文件信息
facetosleep 2012-08-05
  • 打赏
  • 举报
回复
to agoago-2009:
1.使用相对路径测试过,也是提示有问题,no such file
===
Fix:
/mnt/1/2/1001$[1](2001-9-1 2001-9-2).dat 将路径使用sscanf 然后sprintf 拼接后,然后调用stat就正确了,但根本原因还是不太了解
Gloveing 2012-08-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
to agoago_2009:
是的。
stat 同时支持相对与绝对路径
[/Quote]
所以,试试相对路径?
facetosleep 2012-08-05
  • 打赏
  • 举报
回复
单独在编译环境中测试结果正确,在服务器运行失败
==
估计还是路径不对
facetosleep 2012-08-05
  • 打赏
  • 举报
回复
to agoago_2009:
是的。
stat 同时支持相对与绝对路径

64,682

社区成员

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

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