文件I/O汇总整理

文件输入输出(File Input/Output, 文件 I/O)是操作系统提供的用于与文件系统交互的基础功能。文件 I/O 允许程序读取和写入文件,这对于保存数据、配置信息、日志记录等非常重要。下面是关于文件 I/O 的一些基本概念、API 和相关操作:

dc7eb5f3736d483ba11b3a701ec58f5e.jpeg

文件 I/O 概述

文件 I/O 是指程序与文件系统之间的数据交换。在大多数现代操作系统中,文件 I/O 通常通过一系列系统调用来实现,这些调用允许程序打开、读取、写入和关闭文件。

文件 I/O 的基本步骤

  1. 打开文件:获取对文件的访问权限。
  2. 读取/写入文件:从文件读取数据或将数据写入文件。
  3. 关闭文件:释放文件资源。

文件 I/O 的常见 API

POSIX 系统(如 Linux 和 macOS)

  • 打开文件

    • open(const char *pathname, int flags[, mode_t mode]):打开或创建文件。
    • fopen(const char *path, const char *mode):用于文本文件的高级接口。
  • 读取文件

    • read(int filedes, void *buf, size_t nbyte):从文件描述符读取数据。
    • fgets(char *str, int n, FILE *stream):从文件读取一行字符串。
  • 写入文件

    • write(int filedes, const void *buf, size_t nbyte):向文件描述符写入数据。
    • fprintf(FILE *stream, const char *format, ...): 格式化输出到文件。
  • 关闭文件

    • close(int filedes):关闭文件描述符。
    • fclose(FILE *stream):关闭文件流。
  • 其他操作

    • lseek(int filedes, off_t offset, int whence):移动文件位置指示器。
    • fseek(FILE *stream, long offset, int whence):移动文件位置指示器(用于文本文件)。
    • fstat(int filedes, struct stat *buf):获取文件的状态。
    • fstatfs(int filedes, struct statfs *buf):获取文件系统的状态。
    • rename(const char *oldpath, const char *newpath):重命名文件。
    • remove(const char *pathname):删除文件。
    • chmod(const char *pathname, mode_t mode):更改文件权限。
    • chown(const char *pathname, uid_t owner, gid_t group):更改文件的所有者和组。
    • mkdir(const char *pathname, mode_t mode):创建目录。
    • rmdir(const char *pathname):删除空目录。

Windows 系统

  • 打开文件

    • CreateFileA(LPCSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile):创建或打开文件。
  • 读取文件

    • ReadFile(HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped):从文件读取数据。
  • 写入文件

    • WriteFile(HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped):向文件写入数据。
  • 关闭文件

    • CloseHandle(HANDLE hObject):关闭文件句柄。
  • 其他操作

    • SetFilePointer(HANDLE hFile, LONG lDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod):移动文件指针。
    • GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh):获取文件大小。
    • GetFileAttributesA(LPCSTR lpFileName):获取文件属性。
    • MoveFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName):重命名或移动文件。
    • DeleteFileA(LPCSTR lpFileName):删除文件。
    • CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes):创建目录。
    • RemoveDirectory(LPCSTR lpPathName):删除空目录。

示例代码

以下是一个简单的示例,展示如何在 Linux 或 macOS 系统上使用 C 语言打开文件、读取内容、然后关闭文件:

1#include <stdio.h>
2#include <stdlib.h>
3
4int main() {
5    FILE *file;
6    char filename[] = "example.txt";
7    char buffer[1024];
8
9    // 打开文件
10    file = fopen(filename, "r");
11    if (file == NULL) {
12        fprintf(stderr, "无法打开文件: %s\n", filename);
13        exit(EXIT_FAILURE);
14    }
15
16    // 读取文件内容
17    while (fgets(buffer, sizeof(buffer), file) != NULL) {
18        printf("%s", buffer);  // 输出每一行
19    }
20
21    // 关闭文件
22    fclose(file);
23
24    return 0;
25}

注意事项

  • 在进行文件操作时,务必检查函数的返回值以确保操作成功。
  • 使用文件后记得及时关闭,以释放系统资源。
  • 对于二进制文件,应使用 fopen 的 "rb" 和 "wb" 模式。
  • 在处理大文件时,考虑使用缓冲或分块读取以提高效率。
  • 跨平台编程时要注意不同操作系统之间的 API 差异。

文件 I/O 是编程中的基本操作之一,几乎所有的应用程序都会涉及到文件的读写。理解和熟练掌握文件 I/O 的操作对于编写可靠、高效的程序至关重要。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值