1
char a[10],b[]={"COPY"}; 2//定义字符数组a,b 3strcpy(a,b); 4//将b中的COPY复制到a中
2
文件操作是指在程序中读取、写入或修改文件的过程。文件操作在编程中非常重要,因为它允许程序与外部数据进行交互,保存和检索信息。C语言提供了一套标准的文件操作函数,下面是对文件操作的详细介绍:
1. 打开文件 fopen()
在进行文件操作之前,必须首先打开文件。fopen()
函数用于打开文件,并返回一个文件指针,该指针后续将用于操作该文件。
c
Copy code
FILE *fopen(const char *filename, const char *mode);
filename
:要打开的文件名(路径可以是相对路径或绝对路径)。mode
:文件打开模式,决定了文件如何打开。常见的模式有:"r"
:以只读方式打开文件,文件必须存在。"w"
:以写入方式打开文件,若文件存在则覆盖,不存在则创建。"a"
:以追加方式打开文件,若文件不存在则创建。"r+"
:以读写方式打开文件,文件必须存在。"w+"
:以读写方式打开文件,若文件存在则覆盖,不存在则创建。"a+"
:以读写方式打开文件,若文件不存在则创建,写入时内容追加。
示例:
c
Copy code
FILE *fp = fopen("data.txt", "r"); // 打开文件进行读取 if (fp == NULL) { printf("无法打开文件\n"); }
2. 关闭文件 fclose()
文件操作完成后,应当使用fclose()
关闭文件,以释放资源并确保数据完整写入磁盘。
c
Copy code
int fclose(FILE *fp);
- 返回值:
0
表示成功,EOF
表示失败。
示例:
c
Copy code
fclose(fp); // 关闭文件
3. 读取文件内容 fread()
fread()
用于从文件中读取数据,通常用于读取二进制文件。它一次可以读取多个数据项。
c
Copy code
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
ptr
:指向存储读取数据的内存地址。size
:每个数据项的字节数。count
:要读取的数据项数。stream
:文件指针。
示例:
c
Copy code
FILE *fp = fopen("data.bin", "rb"); int buffer[10]; size_t bytesRead = fread(buffer, sizeof(int), 10, fp); printf("读取了 %zu 个整数\n", bytesRead); fclose(fp);
4. 写入文件内容 fwrite()
fwrite()
用于将数据写入文件,通常用于写入二进制文件。它一次可以写入多个数据项。
c
Copy code
size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream);
ptr
:指向要写入的数据的内存地址。size
:每个数据项的字节数。count
:要写入的数据项数。stream
:文件指针。
示例:
c
Copy code
FILE *fp = fopen("data.bin", "wb"); int numbers[] = {1, 2, 3, 4, 5}; fwrite(numbers, sizeof(int), 5, fp); fclose(fp);
5. 文件指针位置操作 fseek()
, ftell()
在文件中读取或写入时,文件指针会根据操作自动移动。可以使用fseek()
和ftell()
手动控制文件指针的位置。
-
fseek()
:设置文件指针的位置。c
Copy code
int fseek(FILE *stream, long offset, int whence);
offset
:偏移量。whence
:位置的起始点,常用的值有:SEEK_SET
:从文件开头开始计算。SEEK_CUR
:从当前位置开始计算。SEEK_END
:从文件末尾开始计算。
-
ftell()
:获取文件指针当前位置。c
Copy code
long ftell(FILE *stream);
示例:
c
Copy code
FILE *fp = fopen("data.txt", "r"); fseek(fp, 10, SEEK_SET); // 将文件指针移动到文件开头后第10个字节 long pos = ftell(fp); // 获取当前文件指针位置 printf("当前文件指针位置:%ld\n", pos); fclose(fp);
6. 判断文件结尾 feof()
feof()
用于检查文件指针是否已到达文件末尾,常用于循环读取文件中的内容。
c
Copy code
int feof(FILE *stream);
- 如果到达文件末尾,返回非零值;否则返回0。
示例:
c
Copy code
FILE *fp = fopen("data.txt", "r"); char ch; while ((ch = fgetc(fp)) != EOF) { // 使用fgetc读取字符 putchar(ch); } fclose(fp);
7. 错误处理 ferror()
ferror()
用于检查文件流是否发生错误。
c
Copy code
int ferror(FILE *stream);
- 如果发生错误,返回非零值;否则返回0。
示例:
c
Copy code
FILE *fp = fopen("data.txt", "r"); if (ferror(fp)) { printf("文件读取错误\n"); } fclose(fp);
常见文件操作流程
- 打开文件: 使用
fopen()
打开文件。 - 读写文件: 使用
fread()
或fwrite()
进行读写操作。 - 移动文件指针: 使用
fseek()
调整文件指针位置,使用ftell()
获取当前位置。 - 检查文件末尾: 使用
feof()
判断是否到达文件末尾。 - 关闭文件: 使用
fclose()
关闭文件,确保文件保存并释放资源。
小结
文件操作是一个非常基础且重要的编程技能,特别是在处理大量数据或需要持久化数据时。C语言提供的文件操作函数非常灵活,可以处理文本文件和二进制文件的读取和写入。理解并熟练使用这些函数可以大大提升程序的功能性。