C/C++/Windows/Linux文件操作

文章目录

  • C语言文件操作
    • 读文件
    • 写文件
    • 其他操作
      • 文件指针重定位
      • 获取指针位置
      • 获取文件大小
      • 重命名文件
      • 删除文件
  • C++文件操作
    • 读文件
    • 读文件
  • Windows文件操作
    • 读文件
    • 写文件
    • 其他操作
      • 复制文件
      • 删除文件/目录
      • 判断目录是否存在
      • 遍历目录下的文件和目录
    • ATL读写文件
  • Linux文件操作


C语言文件操作

文件访问模式字符串含义若文件不存在实动作
“r”从头读打开失败
“w覆盖写创建新文件
“a”追加写创建新文件
“r+”覆盖式可读可写错误
“w+”覆盖式可读可写创建新文件
“a+”追加式可读可写创建新文件
“rb”从头读二进制打开失败
“wb”覆盖写二进制创建新文件
“ab”追加写二进制创建新文件
“rb+”覆盖式可读可写二进制错误
“wb+”覆盖式可读可写二进制创建新文件
“ab+”追加式可读可写二进制创建新文件

读文件

#include <stdio.h>
int main() {
// 1.打开文件FILE* fr = fopen("E:\\work\\testFile\\messfile\\23-11-6\\1.txt", "r"); //以读的方式打开文件if (fr == NULL) { //file为NULL,则打开文件失败,退出程序printf("File cannot be opened! \n");return -1;}// 2.读取内容char buf[0xFF] = { 0 };// 2.1 按字节块读取while (!feof(fr)) //没有到文件末尾{memset(buf, 0, sizeof(buf));size_t len = fread(buf, sizeof(char), sizeof(buf), fr); //每次读取sizeof(char)个字节,读取sizeof(buf)次,也可使用fscanf函数printf("buf: %s, len: %d\n", buf, len);}// 2.2 按字行读取,此方法读取中文会有bugchar* str = NULL;while (!feof(fr)) {memset(buf, 0, sizeof(buf));str = fgets(buf, sizeof(buf), fr);				//fgets一次最多读取sizeof(buf)个字节,遇到换行符会停止读取printf("buf: %s \n", buf);  printf("str: %s \n", str);						//str 内容和buf内容相同	}// 2.3 按字符读取char c = 0;while (c != EOF){c = fgetc(fr); // 获取一个字符printf("%c", c);}printf("\n");// 3.关闭文件if (fclose(fr) != 0){printf("File cannot be closed! \n");return -1;}else{printf("File is now closed! \n");}return 0;
}

写文件

#include <stdio.h>
int main(int argc, char* argv[])
{// 1.打开文件FILE* fw = fopen("E:\\work\\testFile\\messfile\\23-11-6\\1.txt", "w"); //以读的方式打开文件if (fw == NULL) { //file为NULL,则打开文件失败,退出程序printf("File cannot be opened! \n");return -1;}// 2.写入内容char buf[128] = { 0 };// 2.1 按数据块写入char str[] = "南浦凄凄别,西凤袅袅秋。";memcpy(buf, str, strlen(str));fwrite(buf, strlen(buf) + 1, 1, fw);	//每次写入strlen(buf)个字节,写入1次。可以使用fprint函数// 2.2 按行写入while (NULL != fgets(buf, sizeof(buf), stdin)) {printf("Read line with len: %d\n", strlen(buf));fputs(buf, fw);fflush(fw);								//刷新输出缓冲区printf("%s", buf);}// 2.3 按字符写入char ch = getchar();while (ch != '$'){fputc(ch, fw);ch = getchar();}// 3.关闭文件if (fclose(fw) != 0){printf("File cannot be closed! \n");return -1;}else{printf("File is now closed! \n");}return 0;
}

其他操作

文件指针重定位

int fseek ( FILE * stream, long int offset, int origin );

stream:流
offset:相对应 origin 位置处的偏移量,单位为字节
origin:指针的位置
#define SEEK_CUR 1 // 当前位置
#define SEEK_END 2 // 末尾
#define SEEK_SET 0 // 开头

获取指针位置

long int ftell ( FILE * stream );

获取文件大小

long n;
fseek(pf,0,SEEK_END);
n=ftell(pf);

重命名文件

int rename ( const char * oldname, const char * newname );

oldname:原名
newname:新名

删除文件

int remove ( const char * filename );

filename:文件的完整路径


C++文件操作

打开方式含义
ios::in从头读
ios::out覆盖写
ios::ate文件指针放到尾部
ios::app追加写
ios::trunc清空内容
ios::binary二进制方式打开

读文件

#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{// 1.打开文件fstream fr;fr.open("1.txt", ios::in); //以只读模式打开文件if (!fr.is_open())std::cerr << "cannot open the file!" << endl;// 2.读取内容char buf[1024] = { 0 };// 2.1 按元素读取while (fr >> buf)cout << buf << endl;	//每一次的buf是空格或回车键分开的元素// 2.2 按行取while (fr.getline(buf, sizeof(buf)))std::cout << buf << std::endl;// 2.3 按字符读取char c;while ((c = fr.get()) != EOF)std::cout << c;// 2.4常用于二进制文件读写,也可以读非二进制文件fr.read((char*)buf, sizeof(buf));		//读取到buf中,读取sizeof(buf)个字节 cout << buf;// 3.关闭文件fr.close();return 0;
}

读文件

#include <fstream>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{// 1.打开文件ofstream fw;fw.open("1.txt", ios::app); //以追加写模式打开文件if (!fw.is_open())std::cerr << "cannot open the file!" << endl;// 2.写入内容	// 2.1 直接写入fw << "心断新丰酒,销愁斗几千。" << endl;// 2.2 常用于二进制写入,也可用于普通文件写入char buf[1024] = "我未成名君未嫁,可能俱是不如人。";fw.write((char*)buf, strlen(buf));// 3.关闭文件fw.close();system("pause");return 0;
}

Windows文件操作

读文件

#include <windows.h>
int main(int argc, char* argv[])
{// 1.打开文件HANDLE hFile = CreateFile("1.txt", GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == NULL) { return -1;}// 2.读文件char buf[128] = { 0 };DWORD len = 0;DWORD dwBytesToRead = GetFileSize(hFile, NULL); //获取文件大小do { //循环读文件,确保读出完整的文件    if (!ReadFile(hFile, buf, dwBytesToRead, &len, NULL)) {cout << "read file error!" << GetLastError() << endl;return -1;}cout << buf << endl;dwBytesToRead -= len;} while (dwBytesToRead > 0);// 3.关闭文件CloseHandle(hFile);return 0;
}

写文件

int main(int argc, char* argv[])
{// 1.打开文件HANDLE hFile = CreateFile("1.txt", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == NULL) { return -1;}SetFilePointer(hFile, 0, NULL, FILE_END);		//文件指针设置到文件尾,实现追加写// 2.写文件char buf[128] = { 0 };DWORD len = 0;char str[] = "劳歌一曲解行舟,红叶青山水急流,日暮酒醒人已远,满天风雨下西楼。";memcpy(buf, str, strlen(str));WriteFile(hFile, buf, strlen(buf), &len, NULL);FlushFileBuffers(hFile);	//刷新缓存// 3.关闭文件CloseHandle(hFile);system("pause");return 0;
}

其他操作

复制文件

CopyFile()

删除文件/目录

deleteFiles(dir)

判断目录是否存在

#include<io.h>
if (!GetFileAttributesA(mTempDir.c_str()) & FILE_ATTRIBUTE_DIRECTORY)  //mTempDir目录是否存在,不存在则创建目录resultFlag = CreateDirectory(mTempDir.c_str(), NULL);

遍历目录下的文件和目录

//文件句柄,win10用long long,win7用long就可以了
long long hFile = 0;
//文件信息 
struct _finddata_t fileinfo;
if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)	//第一次查找组合的p起来目录或文件是否存在
{do{	 if ((fileinfo.attrib & _A_SUBDIR))//如果是目录,迭代之 {if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)getFiles(p.assign(path).append("\\").append(fileinfo.name), files, names);}else//如果不是,加入列表files.push_back(p.assign(path).append("\\").append(fileinfo.name));} while (_findnext(hFile, &fileinfo) == 0);_findclose(hFile);
}

ATL读写文件

#include<atlfile.h>
using namespace std;
int main(int argc, char* argv[])
{CAtlFile file;file.Create(L"1.txt", GENERIC_WRITE, 0, OPEN_EXISTING);char buf[128] = "北斗横天夜欲阑,愁人倚月思无端。";file.Seek(0, FILE_END);file.Write(buf, strlen(buf));file.Flush();return 0;
}

Linux文件操作

敬请期待

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

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

相关文章

单片机启动流程

存储器 ​ 一个单片机中存在rom和ram&#xff0c;Soc也有rom和ram&#xff08;ddrx&#xff09;&#xff0c;部分Soc还包含MMU&#xff08;Memory Manage Unit 内存管理单元&#xff09;— &#xff08;用于系统内存管理&#xff0c;比如说虚拟内存空间&#xff0c;内存区间的…

Flink SQL自定义标量函数(Scalar Function)

使用场景&#xff1a; 标量函数即 UDF&#xff0c;⽤于进⼀条数据出⼀条数据的场景。 开发流程&#xff1a; 实现 org.apache.flink.table.functions.ScalarFunction 接⼝实现⼀个或者多个⾃定义的 eval 函数&#xff0c;名称必须叫做 eval&#xff0c;eval ⽅法签名必须是 p…

jenkins通知

构建失败邮件通知 配置自己的邮箱 配置邮件服务&#xff0c;密码是授权码 添加构建后操作 扩展 配置流水线 添加扩展 钉钉通知 Jenkins安装钉钉插件 钉钉添加机器人 加签 https://oapi.dingtalk.com/robot/send?access_token98437f84ffb6cd64fa2d7698ef44191d49a11…

为什么审计平台不适合进行数据库变更管理?

关于视源电子 广州视源电子科技股份有限公司 (CVTE) 成立于 2005 年 12 月&#xff0c;旗下拥有多家业务子公司。 截至 2022 年底&#xff0c;公司总人数超 6000 人&#xff0c;约 60% 为技术人员。公司的主营业务为液晶显示主控板卡和交互智能平板等显控产品的设计、研发与销…

C语言之文件操作(剩余部分)

上篇博客字数到极限了&#xff0c;给大家把内容补充在这一篇&#xff0c;我们还剩下文件读取结束的判定和文件缓冲区的内容没有介绍&#xff0c;让我们开始下面的学习吧&#xff01; 目录 1.文件读取结束的判定 1.1feof函数 1.2ferror函数 代码示例 2.文件缓冲区 2.1fflu…

Redis之主从复制

文章目录 一、什么是Redis主从复制&#xff1f;1.作用2.配置主从复制的原因3.环境配置 二、一主二从三、复制原理四、链路总结 一、什么是Redis主从复制&#xff1f; 主从复制&#xff0c;是指将一台Redis服务器的数据&#xff0c;复制到其他的Redis服务器。前者称为主节点(ma…

用Go实现网络流量解析和行为检测引擎

1.前言 最近有个在学校读书的迷弟问我:大德德, 有没有这么一款软件, 能够批量读取多个抓包文件,并把我想要的数据呈现出来, 比如:源IP、目的IP、源mac地址、目的mac地址等等。我说&#xff1a;“这样的软件你要认真找真能找出不少开源软件, 但毕竟没有你自己的灵魂在里面,要不…

类与对象(2)

✨前言✨ &#x1f4d8; 博客主页&#xff1a;to Keep博客主页 &#x1f646;欢迎关注&#xff0c;&#x1f44d;点赞&#xff0c;&#x1f4dd;留言评论 ⏳首发时间&#xff1a;2023年11月11日 &#x1f4e8; 博主码云地址&#xff1a;博主码云地址 &#x1f4d5;参考书籍&…

Vue报错解决Error in v-on handler: “Error: 无效的节点选择器:#div1“

因为我们在创建元素之前用了#div1"所有它会报错&#xff0c;解决方案简单粗暴咱们直接用 setTimeout(createEdit, 1)解决问题了 原理&#xff1a;vue的虚拟dom创建完成以后再调用真是dom就没啥问题 function createEdit() {const editor new E(#div1)editor.config.hei…

系统架构主题之九:软件设计模式及其应用

1 关于设计模式 设计模式是什么&#xff1f;个人理解&#xff0c;其是软件开发中对一些通用问题整理的解决方案&#xff0c;是经过经验总结所提炼的相对较为抽象的&#xff0c;有一定适应性和变化性的“套路”。这里借用了“套路”这个不太好听的词&#xff0c;但目的却是为了…

C++动态库

C动态库 动态库文件&#xff08;Dynamic Link Library&#xff0c;DLL&#xff09;是程序在运行时所需要调用的库。静态库文件是程序在编译时所需要调用的库。 1 环境介绍 VS版本&#xff1a;VS2017 编程语言&#xff1a;C 2 功能介绍 使用VS2017项目模板创建C动态库生成…

Java 之 IO/NIO/OKIO

BIO blocking io AIO Asynchronous IO 从内存读取到写入--输出 从外部到内存 -- 输入 OutputStream //文件不存在则自动创建 try {OutputStream outputStream new FileOutputStream("text.txt");outputStream.write(a);outputStream.write(b);} catch (IOExcep…

Java-多态

1. 多态 1.1 多态的概念 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同的状态。 1.2 多态实现条件 在java中要实现多态&#xff0c;必须要满足如下几个条件&#xff0c;缺一不…

vivado时序分析-3时序分析关键概念

1、时钟相移 时钟相移对应于延迟时钟波形 &#xff0c; 此波形与因时钟路径内的特殊硬件所导致的参考时钟相关。在 AMD FPGA 中 &#xff0c; 时钟相移通常是由 MMCM 或 PLL 原语引入的 &#xff0c; 前提是这些原语的输出时钟属性 CLKOUT*_PHASE 为非零值。 时序分析期间…

Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】

一、传统磁盘管理的弊端 传统的磁盘管理&#xff1a;使用MBR先对硬盘分区&#xff0c;然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时&#xff0c;操作比较麻烦。分区使用空间已经满了&#xff0c;不再够用了&#xff…

如何使用HadSky搭配内网穿透工具打造个人站点并公网访问

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Cpolar杂谈、数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 前言一. 网站搭建1.1 网页下载和安装1.2 网页测试1.3 cpolar的安装和注册 二. 本地网页发…

可变类与不可变类

可变类&#xff08;Mutable Class&#xff09;和不可变类&#xff08;Immutable Class&#xff09;是面向对象编程中的两种类的设计模式&#xff0c;它们在对象的状态和行为上有不同的特性。 可变类&#xff08;Mutable Class&#xff09;&#xff1a; 状态可修改&#xff1a;…

30基于Feign远程调用

2.1.Feign替代RestTemplate Fegin的使用步骤如下&#xff1a; 1&#xff09;引入依赖 我们在order-service服务的pom文件中引入feign的依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-start…

【算法 | 模拟No.4】AcWing 756. 蛇形矩阵 AcWing 40. 顺时针打印矩阵

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【手撕算法系列专栏】【AcWing算法提高学习专栏】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&a…

【chat】4: ubuntu20.04:数据库创建:mysql8 导入5.7表

【chat】3: ubutnu 安装mysql-8 并支持远程访问 已经支持 8.0的SQLyog 远程访问:大神2021年的文章:sql是5.7的版本,我使用的ubuntu20.04,8.0版本:chat数据库设计 C++搭建集群聊天室(七):MySQL数据库配置 及项目工程目录配置 User表,以id 唯一标识 Friend 表,自己的id…