文件:
标准输入设备:键盘
标准输入文件:常开,其文件指针 stdin;
标准输出设备:显示器
标准输出文件:常开,其文件指针 stdout;
文件名:全路径,相对路径
后缀名:关联默认打开它的应用程序
文件:文本文件,二进制文件
1:能看见的是字符1,数字1看不见
文件的操作
fopen:创建或者打开文件 常见的方式:
w:写打开,如果文件不存在则创建新文件,如果文件存在删除原内容
r:读打开,文件必须存在
b:以二进制的形式打开,一般和w或者r联合使用 ,“wb”,“rb”
fclose:关闭文件
fread:从文件中读数据存放到内存中,返回读取成功的项目数,这个非常重要.但返回值小于要求读取的数量时则可以判断文件读取结束
fwrite:将内存(变量或者数组)的数据往文件中写数据
fseek:移动文件位置指针(光标)
‘’:转义字符
在Windows的路径一定是双斜线,例如"D:\hhh\1.txt";
数组和指针相互转换的两个等式.一定要记得
p[i] == *(p+i)
*(arr+i) == arr[i]这里是引用
//随机访问文件数据
int main()
{
const char *path = "D:\\1.txt";
FILE *fr = fopen(path,"rb");
assert(fr != NULL);
int buf[100];
int len = fread(buf,sizeof(int),100,fr);
for(int i=0;i<len;i++)
{
printf("%d ",buf[i]);
}
//fseek(fr,0,SEEK_SET);//文件开头
fseek(fr,-40,SEEK_END);//文件开头
int buf2[100];
int len2 = fread(buf2,sizeof(int),100,fr);
printf("\n%d\n",len2);
for(int i=0;i<len2;i++)
{
printf("%d ",buf2[i]);
}
fclose(fr);
return 0;
}
//读二进制数据
int main()
{
const char *path = "D:\\1.txt";
FILE *fr = fopen(path,"rb");
assert(fr != NULL);
int buf[3];
int len;
while((len=fread(buf,sizeof(int),3,fr)) > 0)
{
for(int i=0;i<len;i++)//输出buf值
{
printf("%d ",buf[i]);
}
}
int buf;
while(fread(&buf,sizeof(int),1,fr) > 0)
{
printf("%d ",buf);
}
int buf[100];
int len = fread(buf,sizeof(int),100,fr);
for(int i=0;i<len;i++)
{
printf("%d ",buf[i]);
}
fclose(fr);
FILE *fw = fopen(path,"wb");
assert(fw != NULL);
int arr[] = {1,2,3,4,5,6,7,8,9,10};
fwrite(arr,sizeof(int),sizeof(arr)/sizeof(arr[0]),fw);
fclose(fw);
return 0;}
//读文本文件数据
int main()
{
//const char *path = "D:\\1\\1.txt";
const char *path = "D:\\1.txt";
FILE *fw = fopen(path,"w");//不能创建文件夹
assert(fw != NULL );
FILE *fr = fopen(path,"r");//文件必须存在
assert(fr != NULL);//一定要有
const char *str = "hello world";
fwrite(str,sizeof(char),strlen(str),fw);
char buf[100] = "";//存放从文件中读取的数据
int len = fread(buf,sizeof(char),100,fr);
printf("%d,%s\n",len,buf);
fclose(fr);
return 0;
}
int main()
{
const char *path = "D:\\1.txt";
//printf("%s\n",path);
FILE * fw = fopen(path,"w");
//int n = 1;
//fwrite(&n,sizeof(int),1,fw);//写二进制数据(内存数据,不做转换)
//写文本数据
const char *str = "hello world";
//fwrite(str,sizeof(char),1,fw);//error
//fwrite(str,sizeof(char),sizeof(str)/sizeof(str[0]),fw);//error
//fwrite(str,sizeof(char),strlen(str),fw);//ok
//fwrite(str,sizeof(char),strlen(str)+1,fw);//包含'\0' '\0':是字符串的结尾标记,文件并不需要
fwrite(str,sizeof(char),strlen(str),stdout);
fclose(fw);
return 0;
}