C语言文件
学习文件操作,主要学习4大主要函数:
a)打开文件 函数 :fopen
b)关闭文件 函数 :fclose
c)读文件 函数 :fread
d)写文件 函数 :fwrite
一、fopen和fclose函数
1、fopen函数:建立1个FILE指针,连接到文件上 例1-1
函数原型:FILE * fopen ( const char * filename, const char * mode );
参数:
filename:指定绝对路径或者相对路径的文件名。
mode:分别指定
如果是成功打开,返回非空;如果打开文件失败,返回NULL;
“r”:当文件存在返回有效文件指针,当文件不存在返回空指针。
“w”:如果文件不存在,创建文件。如果文件存在,清空该文件重新写内容。(fwrite)
“a”:如果文件不存在,创建文件。如果文件存在,不清空原有内容,在原有内容后面追加内容。(fwrite)
当文件不可以写入时,包括文件只读,或者被另一个进程占用。
"w"和"a"都会返回空指针。
返回值:FILE 文件指针类型,可以认为是驾驶员的手柄,把文件操作比作对汽车驾驶
2、fclose:断开FILE*文件指针和文件的连接。例1-1
函数原型:int fclose ( FILE * stream );
//例子1-1
#include <stdio.h>
int main ()
{
FILE * pFile;
pFile = fopen ("myfile.txt","w");
if (pFile!=NULL)
{
fputs ("fopen example",pFile);
fclose (pFile);
}
return 0;
}
二、fwrite和fread函数
1、fwrite四个参数简介:size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );
a)第一个参数是内存地址,第四个参数是磁盘关联文件的句柄。
b)中间两个参数,C语言设计的模式是按照数组的格局,比如:double 数组或者结构体数组。
1.1、fwrite:调用fwrite必须是使用"w"或者"a"模式打开。
memcpy是将一段缓冲区的内容复制到另一段缓冲区上。
fwrite是将一段缓冲区的内容复制到磁盘文件上。
fread是将磁盘上的内容读取到一段缓冲区上;
2、fread四个参数简介:size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
a)第一个参数是输出型参数,必须带入内存变量区(全局区,栈区,堆区等)
b))中间两个参数,C语言设计的模式是按照数组的格局,比如:double 数组或者结构体数组。
2、扩展模式:
t:缺省时text模式。不推荐使用
b:二进制模式。推荐使用。
3、其他读写模式:
“r+”:可读可写.主要特征和失败原因同r模式。
“w+”:可读可写.主要特征和失败原因同w模式。
“a+”:可读可写.主要特征和失败原因同a模
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
FILE* pFile;
char buffer[100];
printf("请输入一些文字:");
scanf("%s", buffer );
pFile = fopen("myfile.txt", "wb"); //文件指针(句柄 关联一个事物c的指针)
fwrite(buffer, sizeof(char), (int)strlen(buffer), pFile); //sizeof 死数组 strlen内部是个循环往后找
//单个 元素个数
fclose(pFile);
return 0;
}
2.b和t两种模式
二进制(b)和文本(t)两种模式对文件的读写,在多数情况下都是相同的。只有当对文本读写时才有一些区别,主要是因为Windows操作系统下换行符采用的是\r\n两个字符来实现的。
文本模式:写(或读)的字符与文件上的字符可能不是一对一的关系
二进制模式:写(或读)的字符与文件上的字符是一对一的关系。
因此,推荐使用二进制模式进行读写
3、文件名的路径:
a)绝对路径:在windows下,开头是盘符的就是绝对路径。
例如:D:\users\test\aaa.txt
b)相对路径:开头不是盘符
例如:“aaa.txt” 或者 “./aaa.txt” 或者 ./bbb/aaa.txt
./或不带.都代表当前执行文件的位置(工作目录)
其他C语言文件函数
1、fseek和rewind,ftell函数:
fseek:当在文件中读来读去时使用,移动文件读取地址
ftell:获取距离文件首地址的距离。
rewind:把文件读取地址强制移动到文件首地址:
可以fseek代替:fseek(fp,0,SEEK_SET)