一.文件的顺序读/写
文件的相关概念
在C语言中,文件通常与流相关联,这里的流可以是文件、网络连接、字符串等。C语言中处理文件的函数库主要在<stdio.h>头文件中定义。
-
文件的打开和关闭
在C语言中,使用fopen函数打开文件,使用fclose函数关闭文件。
FILE *fp = fopen("file.txt", "r"); // 打开文件
if(fp == NULL) {
printf("文件打开失败\n");
return;
}
// 文件操作
fclose(fp); // 关闭文件
-
文件的读取和写入
使用fgetc和fputc函数可以读取和写入一个字符。
int ch;
ch = fgetc(fp); // 读取一个字符
fputc(ch, fp); // 写入一个字符
使用fgets和fputs函数可以读取和写入一行字符串。
char str[100];
fgets(str, 100, fp); // 读取一行字符串
fputs(str, fp); // 写入一行字符串
使用fread和fwrite函数可以读取和写入一个数据块。
char buffer[100];
fread(buffer, 1, 100, fp); // 读取数据块
fwrite(buffer, 1, 100, fp); // 写入数据块
使用fscanf和fprintf函数可以按照格式读取和写入文件。
fscanf(fp, "%d", &num); // 从文件中读取一个整数
fprintf(fp, "%d", num); // 向文件中写入一个整数
-
文件的随机访问
使用fseek函数可以设置文件的读取位置。
fseek(fp, 0, SEEK_SET); // 设置文件的读取位置到文件开头
使用ftell函数可以获取当前文件的读取位置。
long position = ftell(fp); // 获取当前文件的读取位置
-
文本和二进制文件
在C语言中,文件可以是文本文件或二进制文件。文本文件通常按照字符编码来存储数据,而二进制文件则是按照数据在内存中的二进制形式来存储数据。
-
文件结束的判定
使用feof函数可以判断是否到达了文件的末尾。
while(!feof(fp)) {
// 读取文件
}
-
文件的状态检查
使用ferror和clearerr函数可以检查文件的错误状态。
if(ferror(fp)) {
// 处理文件错误
}
clearerr(fp); // 清除文件错误标志
以上是文件操作的基本概念和常用函数,在实际编程中可以根据需要进行选择使用。
文件的打开与关闭
在C语言中,文件的打开和关闭主要是通过库函数fopen()和fclose()来实现的。
-
使用
fopen()函数打开文件
fopen()函数用于打开一个文件,其基本语法如下:
FILE *fopen(const char *path, const char *mode);
其中,path是文件的路径,mode是打开文件的模式。
打开文件的模式主要有以下几种:
-
"r":只读模式,文件必须存在。 -
"w":写模式,文件不存在则创建,存在则清空内容。 -
"a":追加模式,新内容将追加在文件尾。 -
"r+":读写模式,文件必须存在。 -
"w+":读写模式,文件不存在则创建,存在则清空内容。 -
"a+":读写模式,新内容将追加在文件尾。
例如:
FILE *fp = fopen("test.txt", "r");
这段代码会尝试打开当前目录下的test.txt文件,以只读模式打开。
-
使用
fclose()函数关闭文件
fclose()函数用于关闭一个文件,其基本语法如下:
int fclose(FILE *stream);
其中,stream是文件指针。
例如:
fclose(fp);
这段代码会关闭之前打开的文件。
注意:在使用这两个函数时,需要包含头文件<stdio.h>。
总结:
#include<stdio.h>
int main() {
FILE *fp = fopen("test.txt", "r");
if (fp == NULL) {
printf("Failed to open file\n");
return -1;
}
// 对文件进行操作
fclose(fp);
return 0;
}
这段代码首先尝试打开一个文件,如果文件打开失败,则打印错误信息并返回-1,否则进行文件操作后关闭文件。
文件的读/写
在C语言中,文件的读写主要通过以下几个函数来实现:
-
fopen():打开文件
-
fclose():关闭文件
-
fread():读取文件
-
fwrite():写入文件
-
fseek():移动文件指针
-
ftell():获取文件指针位置
-
fgetc():从文件中读取一个字符
-
fputc():写入一个字符到文件中
以下是一些示例代码:
-
使用fopen()和fclose()打开和关闭文件:
FILE *fp;
fp = fopen("test.txt", "r");
if(fp == NULL){
printf("打开文件失败\n");
return -1;
}
fclose(fp);
-
使用fread()读取文件:
FILE *fp;
char buffer[100];
fp = fopen("test.txt", "r");
if(fp == NULL){
printf("打开文件失败\n");
return -1;
}
fread(buffer, 1, 100, fp);
printf("%s", buffer);
fclose(fp);
-
使用fwrite()写入文件:
FILE *fp;
char buffer[] = "Hello, World!";
fp = fopen("test.txt", "w");
if(fp == NULL){
printf("打开文件失败\n");
return -1;
}
fwrite(buffer, 1, strlen(buffer), fp);
fclose(fp);
-
使用fseek()和ftell()获取文件指针位置:
FILE *fp;
char buffer[100];
fp = fopen("test.txt", "r");
if(fp == NULL){
printf("打开文件失败\n");
return -1;
}
fread(buffer, 1, 100, fp);
printf("文件指针位置:%ld\n", ftell(fp));
fseek(fp, 0, SEEK_SET);
printf("移动后的文件指针位置:%ld\n", ftell(fp));
fclose(fp);
-
使用fgetc()和fputc()读取和写入单个字符:
FILE *fp;
char ch;
fp = fopen("test.txt", "w");
if(fp == NULL){
printf("打开文件失败\n");
return -1;
}
ch = fgetc(fp);
printf("%c", ch);
fputc('A', fp);
fclose(fp);
以上代码仅供参考,实际使用时需要根据具体需求进行调整。
文件检测函数
在C语言中,检测文件是否存在可以使用多种方法,下面是几种常见的方法:
-
使用
access()函数
access()函数用于检查文件的权限。如果文件存在,并且具有所请求的权限,则返回0。如果文件不存在或者没有足够的权限,则返回-1。
#include <unistd.h>
#include <stdio.h>
int main() {
if (access("test.txt", F_OK) != -1) {
printf("File exists.\n");
} else {
printf("File does not exist.\n");
}
return 0;
}
-
使用
stat()函数
stat()函数用于获取文件的状态信息。如果文件存在,则返回0,否则返回-1。
#include <sys/stat.h>
#include <stdio.h>
int main() {
struct stat st;
if (stat("test.txt", &st) == 0) {
printf("File exists.\n");
} else {
printf("File does not exist.\n");
}
return 0;
}
-
使用
opendir()和readdir()函数
opendir()和readdir()函数用于读取目录。如果文件存在,则可以在读取目录时找到文件名。
#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir;
struct dirent *ent;
dir = opendir("/path/to/directory");
if (dir != NULL) {
while ((ent = readdir (dir)) != NULL) {
if (!strcmp(ent->d_name, "test.txt")) {
printf("File exists.\n");
break;
}
}
closedir(dir);
} else {
printf("Directory does not exist.\n");
}
return 0;
}
以上三种方法都可以检测文件是否存在,你可以根据实际需求选择合适的方法。
如何创建一个文件
在C语言中,检测文件是否存在可以使用多种方法,下面是几种常见的方法:
-
使用
access()函数
access()函数用于检查文件的权限。如果文件存在,并且具有所请求的权限,则返回0。如果文件不存在或者没有足够的权限,则返回-1。
#include <unistd.h>
#include <stdio.h>
int main() {
if (access("test.txt", F_OK) != -1) {
printf("File exists.\n");
} else {
printf("File does not exist.\n");
}
return 0;
}
使用stat()函数
stat()函数用于获取文件的状态信息。如果文件存在,则返回0,否则返回-1。
#include <sys/stat.h>
#include <stdio.h>
int main() {
struct stat st;
if (stat("test.txt", &st) == 0) {
printf("File exists.\n");
} else {
printf("File does not exist.\n");
}
return 0;
}
-
使用
opendir()和readdir()函数
opendir()和readdir()函数用于读取目录。如果文件存在,则可以在读取目录时找到文件名。
#include <dirent.h>
#include <stdio.h>
int main() {
DIR *dir;
struct dirent *ent;
dir = opendir("/path/to/directory");
if (dir != NULL) {
while ((ent = readdir (dir)) != NULL) {
if (!strcmp(ent->d_name, "test.txt")) {
printf("File exists.\n");
break;
}
}
closedir(dir);
} else {
printf("Directory does not exist.\n");
}
return 0;
}
以上三种方法都可以检测文件是否存在,你可以根据实际需求选择合适的方法。
二.文件的随机读/写
文件定位
在C语言中,文件定位主要是通过fseek函数和ftell函数实现的。
fseek函数:该函数用于改变文件的位置指针。其一般形式为:
fseek(文件指针,位移量,起始点)
其中起始点用宏来表示:
SEEK_SET:文件开头
SEEK_CUR:当前位置
SEEK_END:文件结尾
位移量表示要移动的距离,是长整型数。
例如:
FILE *fp;
fp = fopen("test.txt", "r");
if(fp == NULL)
{
printf("Open file failure!\n");
return -1;
}
fseek(fp, 10, SEEK_SET); //把文件的位置指针移动到离文件开头10个字节处
ftell函数:该函数用于获取文件位置指针的当前位置。其一般形式为:
ftell(文件指针)
返回值为长整型数,表示从文件开始到当前位置指针的字节数。
例如:
FILE *fp;
long position;
fp = fopen("test.txt", "r");
if(fp == NULL)
{
printf("Open file failure!\n");
return -1;
}
fseek(fp, 10, SEEK_SET); //把文件的位置指针移动到离文件开头10个字节处
position = ftell(fp); //获取当前位置指针的位置
printf("The position of file pointer is %ld\n", position);
以上就是C语言中文件定位的基本知识和使用方法。
随机读/写
在C语言中,对文件的随机读写主要通过fseek和ftell函数来实现。
-
fseek函数
fseek函数用于设置文件的当前读写位置。其函数原型为:
int fseek(FILE *stream, long offset, int whence);
参数说明:
-
stream:文件指针
-
offset:偏移量,即需要移动的字节数,可以为正(向文件尾方向),也可以为负(向文件头方向)
-
whence:起始位置,可以取值为:SEEK_SET(文件开头),SEEK_CUR(当前位置),SEEK_END(文件结尾)
返回值:
成功返回0,失败返回非0值。
-
ftell函数
ftell函数用于获取文件的当前读写位置。其函数原型为:
long ftell(FILE *stream);
参数说明:
-
stream:文件指针
返回值:
返回文件的当前位置,如果发生错误,则返回-1L。
下面是一个使用fseek和ftell进行文件随机读写的例子:
#include <stdio.h>
int main() {
FILE *fp;
char buffer[100];
int position;
fp = fopen("test.txt", "r+");
if (fp == NULL) {
printf("Failed to open file\n");
return -1;
}
// 读取文件内容
fread(buffer, sizeof(char), 100, fp);
printf("File content: %s\n", buffer);
// 获取当前位置
position = ftell(fp);
printf("Current position: %d\n", position);
// 移动到文件开头
fseek(fp, 0, SEEK_SET);
// 写入新内容
fwrite("New content", sizeof(char), 12, fp);
// 移动到文件开头
fseek(fp, 0, SEEK_SET);
// 再次读取文件内容
fread(buffer, sizeof(char), 100, fp);
printf("New file content: %s\n", buffer);
fclose(fp);
return 0;
}
在这个例子中,我们首先打开一个名为"test.txt"的文件,然后读取文件的内容并打印出来。接着,我们使用ftell获取当前的文件位置,然后使用fseek将文件位置移动到文件开头。之后,我们使用fwrite函数写入新的内容。最后,我们再次使用fseek将文件位置移动到文件开头,并再次读取文件内容,以验证新内容是否已经写入。

被折叠的 条评论
为什么被折叠?



