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

news2024/9/23 19:26:02

文件和目录操作是编程中非常基础且常用的部分,涉及到文件的创建、读写、删除以及目录的创建、删除等功能。下面是文件和目录操作的汇总整理,包括常见的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 差异。

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

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2071337.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python二级知识点

在阅读之前&#xff0c;感谢大家的关注和点赞。祝你们都能心想事成、健健康康。 一.数据流程图 一般这道题是经常考的&#xff0c;有向箭头--->表示数据流。圆圈○表示加工处理。 二.字典如何比较大小 字典类型是如何比较大小的呢&#xff0c;是使用字典的键来比较大小&…

Python 使用everything的相关模块,创建极其快速的文件搜索和管理工具

在这篇博客中&#xff0c;我将分享如何使用 Python 的 everytools库构建一个简单的文件搜索和管理工具。这个工具允许用户搜索文件、查看文件路径、导出文件信息到 Excel&#xff0c;以及生成配置文件。 C:\pythoncode\new\everythingtools.py 项目概述 这个工具的主要功能包…

mysql binlog 全量与增量备份

mysql binlog 全量与增量备份 mysql binlog常用操作 https://blog.csdn.net/xyy1028/article/details/124446625 mysqldump mysqlbinlog 增量备份 mysql的增量备份 https://blog.51cto.com/u_16213572/10976496 mysql全量备份与增量备份 — vip https://blog.51cto.com/hehe1…

Java学习_20_File以及IO流

文章目录 前言一、FileFile中常见的成员方法判断和获取创建和删除获取和遍历 二、IO流IO流体系结构字节流字节输出流&#xff1a;FileOutputStream字节输入流FileInputStrea文件拷贝try……catch异常处理中文乱码现象 字符流字符流读取FileReader字符流输出FileWriter底层原理 …

堆《数据结构》

堆《数据结构》 1. 堆排序1.1 建堆向上调整建堆向下调整建堆 1.2 利用堆删除思想来进行排序1.3Top-k问题 2.堆的时间复杂度 1. 堆排序 1.1 建堆 建大堆 建小堆 向上调整建堆 AdjustUp建堆 void AdjustUp(HPDataType* a, int child) {// 初始条件// 中间过程// 结束条件int p…

专利权和版权有什么区别?

专利权和版权有什么区别&#xff1f;

【IEEE】第四届智能通信与计算国际学术会议(ICICC 2024,10月18-20)

第四届智能通信与计算国际学术会议&#xff08;ICICC 2024&#xff09;将于2024年10月18-20日在中国郑州隆重举行。 会议旨在为从事智能通信与计算研究的专家学者、工程技术人员、技术研发人员提供一个共享科研成果和前沿技术&#xff0c;了解学术发展趋势&#xff0c;拓宽研究…

帆软报表,达梦数据库驱动上传失败

1、按照正常操作新建数据库连接&#xff0c;上传准备好的达梦驱动时&#xff0c;提示如图一需要修改SystemConfig.driverUpload为true才可以。 2、FineDB存储了数据决策系统中除平台属性配置以外的所有信息。详情请参见&#xff1a; FineDB 数据库简介。 3、因此管理员可通过…

都2024年了,你还在手动敲SQL吗?试试这款开源免费的AI数据库!

​ ✍️作为一名开发人员&#xff0c;基本上每天都要和数据库打交道&#xff0c;无论是设计表结构、执行查询还是调试应用中的数据问题。长期以来&#xff0c;我一直在使用诸如DBeaver、Navicat和DataGrip这样的数据库管理工具。尽管这些工具各有千秋&#xff0c;但在面对复杂的…

python怎么使用模块中的类

Chain.py是模块&#xff08;Module&#xff09;&#xff0c;在代码里定义的Class Chain是在模块里定义的类。 一种方法是&#xff1a; from Chain import Chain 还有一种方法是&#xff1a; a Chain.Chain() 相当于从模块里索引出这个类&#xff0c;两种方法都可以。

3b1b自注意力机制讲解记录

本文是对视频【官方双语】直观解释注意力机制&#xff0c;Transformer的核心 | 【深度学习第6章】的整理 1 背景 要解决的问题&#xff1a;接收一段文本&#xff0c;预测下一个词 句子会被切成许多小块&#xff0c;这些小块称为token。token可以是单词也可以是词组。为了简单…

SpringBoot百万行Excel导入MySQL实践

在公司开发时&#xff0c;客户说需要支持大数据量excel导入&#xff0c;所以打算写一篇文章记录下思路和优化过程。 一、前期准备 首先我们选用的肯定是阿里出品的EasyExcel&#xff0c;对比poi和jxl占内存更少 easyexcel官方网站准备测试的数据库和excel文件&#xff0c;已经…

Zustand:让React状态管理更简单、更高效

Zustand 这个单词在德语里是状态的意思&#xff08;发音&#xff1a;促stand&#xff09; 1. 下载zustand npm i zustand 或者 yarn add zustand2.创建一个store import { create } from zustandconst useBearStore create((set) > ({bears: 0,increasePopulation: …

20240824给飞凌OK3588-C的核心板刷Ubuntu22.04并连接adb

20240824给飞凌OK3588-C的核心板刷Ubuntu22.04并连接adb 2024/8/24 15:56 缘起&#xff0c;由于我司对面积有极度的追求&#xff0c;所以将飞凌OK3588-C开发板使用的【9线】type-C接口&#xff08;USB3.1?&#xff09;降级为4线的USB2.0。 【micro USB/MINI USB。】 先决条件…

基于RK3588的多摄像头车辆与车道线检测系统(基于rk3588的车辆和车道线检测,可以带四个720p的摄像头,2个1080p的摄像头)

硬件配置&#xff1a; 处理器&#xff1a;Rockchip RK3588&#xff0c;这是一款高性能的嵌入式处理器&#xff0c;支持多路高清视频输入和处理。摄像头配置&#xff1a; 4个720p&#xff08;1280x720&#xff09;分辨率的摄像头2个1080p&#xff08;1920x1080&#xff09;分辨…

什么是持续集成(持续交付、部署)

文章目录 1 持续集成1.1 持续集成的好处1.2 持续集成的目的1.3 没有持续集成的状况 2 持续交付3 持续部署4 持续交付和持续部署的区别 1 持续集成 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;&#xff0c;简单来说持续集成就是频繁地&#xff…

拓扑排序,以及区间dp相关试题

目录 1.有向无环图(DAG图&#xff09; 2.AOV网:顶点活动图 3.拓扑排序 4.实现拓扑排序 力扣.207课程表 牛客.最长回文子序列 1.有向无环图(DAG图&#xff09; 入度:表示有多少条边指向它 出度:有多少条边向外指出他 2.AOV网:顶点活动图 3.拓扑排序 找到做事情的先后顺序 …

React学习笔记(三)——redux状态管理工具

1. Redux快速上手 1.1 什么是Redux&#xff1f; Redux 是 React 最常用的 集中状态管理工具 &#xff0c;类似于 Vue 中的 Pinia&#xff08;Vuex&#xff09;&#xff0c; 可以独立于框架运行 作用&#xff1a; 通过集中管理的方式管理应用的状态 1.2 Redux快速体验 不和任何…

【OpenGL学习笔记】--图像管线

图像管线&#xff08;Image Pipeline&#xff09;是计算机图形学中一个核心概念&#xff0c;尤其是在图形处理和渲染的上下文中。它是一个用于处理和渲染图像的流程&#xff0c;其中包括从场景数据的输入到最终图像输出的各个阶段。 图像管线的组成 顶点处理&#xff08;Verte…

大模型入门到精通——使用Embedding API及搭建本地知识库(一)

使用Embedding API及搭建本地知识库 1. 基于智谱AI调用Embedding API实现词向量编码 首先&#xff0c;生成.env 文件&#xff0c;填写好智谱AI的API-key 参考&#xff1a;大模型入门到实战——基于智谱API key 调用大模型文本生成 读取本地/项目的环境变量。 find_dotenv(…