C语言fopen不能打开.txt文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void encrypt(char *f1,char *pwd,char *f2)
{
int i=0;
FILE *fp1,*fp2; //两个文件的句柄,fp1为需要加密的文件,fp2为保存加密后的文件
char ch;
fp1=fopen(f1,"rb"); //以读的方式打开要加密的文件
if(fp1==NULL)
{
printf("open failed!\n");
exit(1);
}
if((fp2=fopen(f2,"wb"))==NULL)//以写的方式打开另外一个文件
{
printf("open failed!\n");
exit(1);
}
ch=fgetc(fp1);//fgetc()就是从文件中读取一个字符
while(!feof(fp1))//判断文件是否读完
{
ch=ch^*(pwd+i);//对读取的一个字符,进行异或
i++;
fputc(ch,fp2);//把处理后的字符写入另外一个文件
ch=fgetc(fp1);//然后再从要加密的文件中读取下一个字符
if(i>9)
{
i=0;
}
}
fclose(fp1);//关闭文件
fclose(fp2);
}

void main()
{
char f1[30];
char f2[30];
char pwd[10];
printf("sourcefile:");
scanf("%s",f1);//输入要加密文件的路径,放C盘就输C://
printf("password:");
scanf("%s",pwd);//密码主要用于字符的加密
printf("destinationfile:");
scanf("%s",f2);//保存加密文件的路径
encrypt(f1,pwd,f2);//调用函数
}

①文件不存在;
②文件名错误,打开文件的名字应该写成"c:\\file.txt",而不是"c:\file.txt";
③代码错误;
fopen函数用于打开文件并获取文件的指针,以便对文件进行操作。
函数原型:FILE * fopen(const char * path,const char * mode);
参数:path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。
mode有下列几种形态字符串:
r 以只读方式打开文件,该文件必须存在。
r+ 以可读写方式打开文件,该文件必须存在。
rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。
w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)
a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)
wb 只写打开或新建一个二进制文件;只允许写数据。
wb+ 读写打开或建立一个二进制文件,允许读和写。
ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。
上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库以二进制模式打开文件。如果不加b,表示默认加了t,即rt,wt,其中t表示以文本模式打开文件。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask值。
有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。
返回值:
文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。
一般而言,打开文件后会做一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以一般在fopen()后作错误判断及处理。
示例:以只读方式打开文件

#include
#define F_PATH "d:\\myfile\\file.dat"
int main(void)
{
FILE*fp=NULL;//需要注意
fp=fopen(F_PATH,"r");
if(NULL==fp)
{
return -1;//要返回错误代码
}
fclose(fp);
fp=NULL;//需要指向空,否则会指向原打开文件地址

return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-07-11
是可以打开txt文件的
估计是你输入的问题
如果是C:\a.txt
那么输入C:\a.txt就可以了
不需要C:\\a.txt
这个\\是在写到代码里面 做转义用的, 输入输出的时候 只是一个\追问

追答

从代码上看是没什么问题的,建议你用固定的文件名,直接测试一下是不是可以读写,而不是通过输入的方式

追问

固定的文件名是设么意思

本回答被网友采纳
相似回答