Linux与Windows的文件与目录操作API汇总整理

文件和目录操作是编程中非常基础且常用的部分,涉及到文件的创建、读写、删除以及目录的创建、删除等功能。下面是文件和目录操作的汇总整理,包括常见的API及其用途:

54e27b6950db40c4955a6771bb4f07ad.jpeg

文件操作

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): 获取文件系统的状态。
  • 文件属性

    • chmod(const char *pathname, mode_t mode): 更改文件权限。
    • chown(const char *pathname, uid_t owner, gid_t group): 更改文件的所有者和组。
  • 文件删除

    • remove(const char *pathname): 删除文件。
  • 文件重命名

    • rename(const char *oldpath, const char *newpath): 重命名文件。

目录操作

POSIX 系统(如 Linux 和 macOS)

  • 创建目录

    • mkdir(const char *pathname, mode_t mode): 创建目录。
  • 删除目录

    • rmdir(const char *pathname): 删除空目录。
  • 遍历目录

    • opendir(const char *name): 打开目录流。
    • readdir(DIR *dirp): 读取目录流中的条目。
    • closedir(DIR *dirp): 关闭目录流。

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): 获取文件属性。
  • 文件属性

    • SetFileAttributesA(LPCSTR lpFileName, DWORD dwFileAttributes): 更改文件属性。
  • 文件删除

    • DeleteFileA(LPCSTR lpFileName): 删除文件。
  • 文件重命名

    • MoveFileA(LPCSTR lpExistingFileName, LPCSTR lpNewFileName): 重命名或移动文件。
  • 创建目录

    • CreateDirectoryA(LPCSTR lpPathName, LPSECURITY_ATTRIBUTES lpSecurityAttributes): 创建目录。
  • 删除目录

    • RemoveDirectory(LPCSTR lpPathName): 删除空目录。
  • 遍历目录

    • FindFirstFileA(LPCSTR lpFileName, LPWIN32_FIND_DATAA lpFindFileData): 开始遍历目录。
    • FindNextFileA(HANDLE hFindFile, LPWIN32_FIND_DATAA lpFindFileData): 遍历下一个文件。
    • FindClose(HANDLE hFindFile): 结束遍历。

示例代码

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

1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <sys/stat.h>
5#include <fcntl.h>
6
7int main() {
8    char filename[] = "example.txt";
9    int filedes;
10    char text[] = "Hello, world!";
11
12    // 创建文件
13    filedes = open(filename, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR);
14    if (filedes == -1) {
15        perror("无法创建文件");
16        exit(EXIT_FAILURE);
17    }
18
19    // 写入内容
20    if (write(filedes, text, strlen(text)) == -1) {
21        perror("无法写入文件");
22        close(filedes);
23        exit(EXIT_FAILURE);
24    }
25
26    // 关闭文件
27    if (close(filedes) == -1) {
28        perror("无法关闭文件");
29        exit(EXIT_FAILURE);
30    }
31
32    return 0;
33}

注意事项

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

文件和目录操作是编程中的基本组成部分,几乎所有的应用程序都会涉及到这些操作。理解和熟练掌握这些操作对于编写可靠、高效的程序至关重要。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值