工具侠怎么刷本地rec:(由用户操作)在C语言中输入一个文件名之后打开该文件,请问应该怎么编写?

来源:百度文库 编辑:神马品牌网 时间:2024/05/08 18:16:28
应该是关于fopen的问题吧?应该怎么编写?
main()
{
FILE *f;
char a[50],*fp;
printf("请输入你要打开的文章:");
getchar();
gets(a);
fp=a;
if((f=fopen("*fp","r"))==NULL)printf("error\n");
}
注意fopen后面,请问怎么做才可以读入字符串a上面的字母作为要读取的文件名呢?

#include <iostream.h>

#include <fstream.h>

#include <stdlib.h>
int main(int argc,char *argv[])
{void setfilename(char * dest,char * src,int i);

char filename[100];

if(argc==1)

{cerr<<"命令不对"<<endl;

exit(1);}

if(argc==2)

//以下为分割文件代码

{int count=1,disksize=2048*705,disknum;

fstream f2(argv[1],ios::in|ios::binary); //打开要分割的文件

if(f2.fail()) exit(1); //打开失败则退出

f2.seekg(0,ios::end);

streampos pos2=f2.tellp();

f2.seekg(0,ios::beg);

disknum=pos2/disksize;

if(!disknum) exit(0);

//如果文件小于一张磁盘容量则退出

if(pos2%disksize) disknum=disknum+1;

for(int b=1;b<disknum+1;b++)

{int y;

setfilename(filename,argv[1],b);

//调用建立文件名函数

fstream f1(filename,ios::out|ios::binary);

//建立新文件

do{y=f2.get();

//从要分割的文件读取数据

count=count+1;

f1.write((char *)&y,sizeof(char));}

//往新文件写数据

while((y!=EOF)&&(count<=disksize*b));

f1.close(); }

f2.close();}

else //以下为文件合并代码

{int x;

fstream f(argv[1],ios::out|ios::app|ios::binary);

for(int i=2;i<argc;i++)

{fstream f1(argv[i],ios::in|ios::binary);

if(f1.fail()) exit(1);

x=f1.get();

while(x!=EOF)

{f.write((char *)&x,sizeof(char));

x=f1.get();}

f1.close();}

f.close();}}

//以下为建立文件名函数

void setfilename(char*dest,char *src,int i)

{int x,a=0,b=0;

bool flag=false;

for(int i=0;src[i]!='\0';i++)

if (src[i]=='.') flag=true;

//判断文件是否含有扩展名

if(flag)//如有扩展名则按以下代码处理

{while(src[b]!='.')

{dest[b]=src[b];

b++;}

a=b;

if(i<=9)

{x=i+48;

dest[a]=(char) x;}

for(int i=0;i<4;i++)

{if(src[b]!='\0')

{a=a+1;

dest[a]=src[b];

b=b+1;}

else break;}

dest[a+1]='\0';}

else{//如没有扩展名则按下面代码处理

while(src[a]!='\0')

{dest[a]=src[a];

a=a+1;}

if(i<=9)

{x=i+48;

dest[a]=char (x);

dest[a+1]='\0';}}}