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++程序有什么特殊的地方?
谢谢
...全文
283 12 打赏 收藏 转发到动态 举报
写回复
用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;
}

23,120

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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