社区
Linux/Unix社区
帖子详情
ifstream在UNIX中的路径问题
wbkunt
2007-05-12 02:05:52
我定义了一个输入流
string Buf="/home4/test.txt";
ifstream ITEST(Buf.txt,ios::in);
if(!ITEST)
{
cerr<<"Fail to open "<<Buf<<endl;
return -1;
}
高手看看有什么问题不
Windows下面写的,成功了
搬到Unix下面就不行了 真是郁闷啊
也请高手说说在Unix下面写C++程序有什么特殊的地方?
谢谢
...全文
319
12
打赏
收藏
ifstream在UNIX中的路径问题
我定义了一个输入流 string Buf="/home4/test.txt"; ifstream ITEST(Buf.txt,ios::in); if(!ITEST) { cerr<<"Fail to open "<<Buf<<endl; return -1; } 高手看看有什么问题不 Windows下面写的,成功了 搬到Unix下面就不行了 真是郁闷啊 也请高手说说在Unix下面写C++程序有什么特殊的地方? 谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
VCLIFE
2007-05-12
打赏
举报
回复
ios::不行那就换ios_base::试
wbkunt
2007-05-12
打赏
举报
回复
运行结果:
/home4/zhwhuang/jt/count/cycledir.dir
/home4/zhwhuang/jt/count/cycledir.dir
/home4/zhwhuang/jt/count/23.dir /home4/zhwhuang/jt/count/23.dir
/home4/zhwhuang/jt/count/23.dir
/home4/zhwhuang/jt/count/23.dir
Fail to open /home4/zhwhuang/jt/count/23.dir
shit
wbkunt
2007-05-12
打赏
举报
回复
我干脆把代码贴出来吧 ,终于要贴一回代码了 汗ing
我是菜鸟!
其中有些是我用错调试的语句 我也把结果给贴出来,
谢谢了。
头文件:count.h
#ifndef _COUNT_H
#define _COUNT_H
#include <fstream>
#include <string>
#include <iostream>
using namespace std;
const int CycleNum=3;
const int PassNum=5;
typedef struct tagPASSFILE
{
string name;
int count;
}PASSFILE;
typedef struct tagPASSDIRSTR
{
string passdirstr;
PASSFILE passfile[PassNum];
}PASSDIRSTR;
#endif
源文件:count.cpp
#include "count.h"
int main()
{
string CycleDirStr="/home4/zhwhuang/jt/count/cycledir.dir";
PASSDIRSTR PassDir[CycleNum];
cout<<CycleDirStr<<endl<<CycleDirStr.c_str()<<endl;
ifstream ICYCLEDIR;
ICYCLEDIR.open(CycleDirStr.c_str(),ios::in);
if(!ICYCLEDIR)
{
cerr<<"Fail to open "<<CycleDirStr<<endl;
return -1;
}
string Buf="/home4/zhwhuang/jt/count/23.dir";
cout<<Buf<<" "<<Buf.c_str()<<endl;
ifstream ITEST;
ITEST.open(Buf.c_str(),ios::in);
if(!ITEST)
{
cerr<<"Fail to open "<<Buf<<endl;
return -1;
}
int k;
for(k=0;k!=PassNum;++k)
{
getline(ITEST,Buf,'\n');
cout<<Buf<<endl;
}
ofstream OPASSDIR;
OPASSDIR.open("/home4/zhwhuang/jt/count/RefTrack.dir",ios::app);
if(!OPASSDIR)
{
cerr<<"Fail to open RecTrack.dir"<<endl;
return -1;
}
// OPASSDIR<<1<<endl<<2<<endl<<3<<endl;
// ofstream outfile("out.txt",ios::app);
int i,j;
string szBuf;
int Max;
int index;
ifstream IPASSDIR;
ifstream IPASSFILE;
for (i=0;i!=CycleNum;++i)
{
//cout<<"before:"<<PassDir[0].passfile[0].name<<endl;
getline(ICYCLEDIR,PassDir[i].passdirstr,'\n');
cout<<PassDir[i].passdirstr<<endl<<(PassDir[i].passdirstr).c_str()<<endl;
IPASSDIR.open((PassDir[i].passdirstr).c_str(),ios::in);
if(IPASSDIR.fail())
{
cerr<<"Fail to open "<<PassDir[i].passdirstr<<endl;
cerr<<"shit"<<endl;
return -1;
}
//cout<<PassDir[i].passdirstr<<endl;
for (j=0;j!=PassNum;++j)
{
getline(IPASSDIR,PassDir[i].passfile[j].name,'\n');
//cout<<PassDir[i].passfile[j].name<<endl;
PassDir[i].passfile[j].count=0;
cout<<PassDir[i].passfile[j].name<<endl;
IPASSFILE.open((PassDir[i].passfile[j].name).c_str(),ios::in);
if(!IPASSFILE)
{
cerr<<"Fail to open "<<PassDir[i].passfile[j].name<<endl;
cerr<<"damn"<<endl;
return -1;
}
do
{
getline(IPASSFILE,szBuf,'\n');
//outfile<<szBuf<<endl;
PassDir[i].passfile[j].count=PassDir[i].passfile[j].count+1;
} while(!IPASSFILE.eof());
PassDir[i].passfile[j].count=PassDir[i].passfile[j].count-1;
//outfile<<endl<<"**"<<PassDir[i].passfile[j].count<<endl;
}
}
for (j=0;j!=PassNum;++j)
{
Max=0;
index=-1;
for (i=0;i!=CycleNum;++i)
{
if (Max<PassDir[i].passfile[j].count)
{
Max=PassDir[i].passfile[j].count;
index=i;
}
}
OPASSDIR<<PassDir[index].passfile[j].name<<endl;
}
IPASSDIR.close();
IPASSFILE.close();
ICYCLEDIR.close();
OPASSDIR.close();
return 0;
}
sAGiTTaR
2007-05-12
打赏
举报
回复
我是菜鸟,如果
const char *ch=buf.c_str();
那是ch是不是应该等于"//home4//test.txt",照这样的话,那程序应该没有错了,搞不清楚了,高手来指点下吧,楼主最好把报错信息给贴下
=========================
'/' 和'\'是不一样的,unix下的路径名都用'/'来表示,这个字符在字符串中没有特殊意义,一个就够了。
wbkunt
2007-05-12
打赏
举报
回复
我试过了 用"//home4//test.txt"和"/home4//test.txt"是一样的,
还是不行 晕啊!
谢谢楼上这位兄弟
sAGiTTaR
2007-05-12
打赏
举报
回复
把ios::in 换成fstream::in试试
VCLIFE
2007-05-12
打赏
举报
回复
我是菜鸟,如果
const char *ch=buf.c_str();
那是ch是不是应该等于"//home4//test.txt",照这样的话,那程序应该没有错了,搞不清楚了,高手来指点下吧,楼主最好把报错信息给贴下
VCLIFE
2007-05-12
打赏
举报
回复
我想应该是buf.c_str这句的问题吧
VCLIFE
2007-05-12
打赏
举报
回复
对,刚才没有看出来.//表示/
wbkunt
2007-05-12
打赏
举报
回复
就是文件打开失败了
VCLIFE
2007-05-12
打赏
举报
回复
出的什么错啊,你的GCC版本多少
wbkunt
2007-05-12
打赏
举报
回复
刚才写错了 不好意思
string Buf="/home4/test.txt";
ifstream ITEST(Buf.c_str(),ios::in);
if(!ITEST)
{
cerr<<"Fail to open "<<Buf<<endl;
return -1;
}
AR学习笔记(二):Exiv2库的编译
本文记录了在
UNIX
-like系统上编译和使用Exiv2库的过程,包括正确构建和安装步骤,以及在从软件包运行时遇到的GLIBCXX_3.4.26和GLIBC_2.29版本不匹配
问题
的解决方法。此外,还提到了在编译程序时遇到的未定义引用和std::
ifstream
reader不完整类型的错误,分别通过调整GCC版本和添加库头文件解决。
Boost::Filesystem
本文介绍了Boost.Filesystem库,这是一个可移植的C++库,用于文件系统
路径
、文件和目录的查询与操作。通过示例代码展示了如何使用该库进行文件类型判断、
路径
操作及错误处理等功能。
C++文件读写
本文详细介绍了C++
中
I/O流(包括fstream、ofstream和
ifstream
)的基本概念、文本文件的读写方法、随机读写操作以及二进制文件的处理,还提供了一个简易的MV命令示例,涉及文件打开、关闭、权限检查和覆盖检查。
boost I 操作系统相关的库(二)- filesystem系统
本文详细介绍了C++17
中
filesystem库的使用,包括path类的操作(构造、追加、绝对
路径
获取、文件名判断)、文件状态与属性管理、目录迭代、文件流操作,以及如何处理异常。通过实例演示了如何跨平台进行文件系统操作,提升代码可移植性和健壮性。
Linux C:access()时间条件竞争漏洞
本文详细介绍了access()函数的功能、参数、返回值及常见使用场景,特别强调了其在文件权限检查
中
的作用。同时,揭示了access()与open()函数间的时间差可能引发的安全漏洞,即时间条件竞争
问题
,提供了具体的代码示例与利用方法。
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章