WIN32核心编程 - 文件系统 - 文件操作 - 目录操作

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> 链接点击跳转博客主页

目录

文件系统基本概念

文件操作(基本)

文件操作(属性)


文件系统基本概念

  • 文件(File):计算机中存储数据的基本单位。文件可以是文本文件、图像文件、音频文件、视频文件等,每个文件都有一个唯一的文件名。

  • 目录(Directory):也称为文件夹,用于组织和存储文件。目录可以包含文件和其他目录,形成文件系统的层次结构。

  • 文件系统的层次结构

    • 层次结构(Hierarchy):文件系统中文件和目录之间的组织关系形成了层次结构,通常是树状结构,其中根目录是顶层目录,包含其他目录和文件,而子目录可以包含更多的子目录和文件。

文件操作(基本)

  • 创建文件
    • 在Windows系统中,可以使用 C++ 的标准库函数来创建文件,也可以使用 Windows API 如 CreateFile()。
  • 打开和关闭文件
    • 文件在使用前必须打开,并在使用完后关闭以释放系统资源。Windows API 提供了CreateFile()函数来打开或创建文件,并使用CloseHandle()来关闭文件。
  • 读取和写入文件内容
    • 文件内容的读取和写入可以通过标准C++库中的fstream类或Windows API的ReadFile()WriteFile()函数实现。

    • 在一个文件中设置当前的读写位置SetFilePointer

    • 针对一个打开的文件,将当前文件位置设为文件末尾SetEndOfFile

  • 复制文件 - CopyFile 函数用于复制文件。
  • 移动文件 - MoveFile 或 MoveFileEx 函数用于移动文件。
  • 删除文件 - DeleteFile 函数用于删除文件。
  • 示例代码
  • #include <iostream>
    #include <Windows.h>int main()
    {const char* FileName = "D:\\Test.txt";const char* outPutData = "Hello 0xCC";char szBuffer[0xFF] = { 0 };DWORD dwWriteBytes = 0;DWORD dwReadBytes = 0;HANDLE hFile = NULL;// 创建或者打开文件hFile = CreateFileA(FileName,GENERIC_READ | GENERIC_WRITE,0,NULL,CREATE_NEW,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile == INVALID_HANDLE_VALUE){if (GetLastError() == ERROR_FILE_EXISTS) std::cout << "ERROR_FILE_EXISTS" << std::endl;return 1;}// 写入文件数据内容if (!WriteFile(hFile, outPutData, strlen(outPutData), &dwWriteBytes, NULL)){std::cout << "WriteFile -> " << GetLastError() << std::endl;CloseHandle(hFile);return 2;}// 读取文件数据内存SetFilePointer(hFile, 0, NULL, FILE_BEGIN);if (!ReadFile(hFile, szBuffer, 0xFF, &dwReadBytes, NULL)){std::cout << "ReadFile -> " << GetLastError() << std::endl;CloseHandle(hFile);return 3;}CloseHandle(hFile);return 0;
    }

文件操作(属性)

  • 文件属性和元数据是文件系统提供的数据,用于描述文件的特性和状态。属性可以包括文件的只读状态、隐藏状态、系统状态等,而元数据可以包括文件的创建、修改和访问时间。
    • 在Windows中,可以使用GetFileAttributesSetFileAttributes函数获取和设置文件的属性。

    • 只读(Read-only):该文件不可被修改。

    • 隐藏(Hidden):该文件在默认情况下不显示。

    • 系统(System):表示文件是系统文件,这通常表示操作系统用于内部用途的文件。

    • 存档(Archive):用于备份和恢复操作,表明文件自上次备份后已被修改。

  • 文件时间戳
    • 可以通过GetFileTimeSetFileTime函数来获取和设置这些时间戳。

    • 可以通过CompareFileTime来判断文件时间是否相同。

    • 创建时间:文件被创建的时间。

    • 修改时间:文件最后被修改的时间。

    • 访问时间:文件最后被访问的时间。

  • 文件大小
    • 可以通过GetFileSize/GetFileSizeEx来获取指定文件的大小。
    • #include <iostream>
      #include <Windows.h>int main()
      {HANDLE hFile = CreateFile(L"D:\\Debug\\WinHex_v20.3_SR-5_x86_x64.exe",GENERIC_ALL,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);LARGE_INTEGER li = { 0 };GetFileSizeEx(hFile, &li);return 0;
      }

  • 对象类型
    • 可以使用GetFileType确定打开的文件(设备)的类型。
    • #include <iostream>
      #include <Windows.h>int main()
      {HANDLE hFile = CreateFile(L"D:\\Debug\\WinHex_v20.3_SR-5_x86_x64.exe",GENERIC_ALL,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);DWORD dwType = GetFileType(hFile);return 0;
      }

  • 文件路径
    • 可以使用GetFullPathName指定文件的完整路径
    • 	TCHAR szBuffer[MAX_PATH] = { 0 };GetFullPathName(L"0xCC.exe", MAX_PATH, szBuffer, NULL);
  • 示例代码
  • #include <iostream>
    #include <Windows.h>int main()
    {const char* FilePath = "D:\\Test.txt";// 获取文件属性DWORD dwAttribute = GetFileAttributesA(FilePath);std::cout << std::hex << dwAttribute << std::endl;// 获取文件时间HANDLE hFile = CreateFileA(FilePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile == INVALID_HANDLE_VALUE) return 1;FILETIME CreateTime, AccessTime, WriteTime;GetFileTime(hFile, &CreateTime, &AccessTime, &WriteTime);SYSTEMTIME sysTime = { 0 };FileTimeToSystemTime(&CreateTime, &sysTime);FileTimeToSystemTime(&AccessTime, &sysTime);FileTimeToSystemTime(&WriteTime, &sysTime);return 0;
    }

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

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

相关文章

PHP灵活用工任务小灵通微信小程序系统源码

&#x1f4bc;灵活赚钱新风尚&#xff01;灵活用工任务小灵通微信小程序&#xff0c;兼职自由两不误&#x1f680; &#x1f50d; 一、海量任务&#xff0c;随时随地接单赚外快 还在为找不到合适的兼职而烦恼吗&#xff1f;&#x1f914; 灵活用工任务小灵通微信小程序&#…

Java-Sql注入以及如何解决

sql脚本注入: 如果sql语句使用字符串拼接&#xff0c;可能会出现字符串的拼接&#xff0c;导致sql注入。 #是会先进行预编译&#xff0c;传进来的参数通过占位符填入到已经完成编译的语句中去。

paddleocr运行报错?谈谈解决思路。

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

代码随想录算法训练营第四十七天|1143.最长公共子序列、 1035.不相交的线、53. 最大子序和、392.判断子序列

1143.最长公共子序列 题目链接&#xff1a;1143.最长公共子序列 文档讲解&#xff1a;代码随想录 状态&#xff1a;一开始没想明白为啥要 max(dp[i - 1][j], dp[i][j - 1]) 思路&#xff1a; 如果text1[i - 1] 与 text2[j - 1]相同&#xff0c;那么找到了一个公共元素&#xff…

亚马逊个人卖家掌控物流,教你在单个ERP端口上实现全自动发货

亚马逊个人卖家可对接20多家国际物流&#xff0c;个人如何发货打单&#xff1f; 大家好&#xff0c;今天介绍这款erp有了订单后怎么发货。个人ERP在选择发货的时候只能选择中转仓&#xff0c;这是要把货发给ERP的商家&#xff0c;由商家代打包&#xff0c;打包费。这块开发了自…

协议转换网关的工作原理-天拓四方

在当今数字化和网络化的社会中&#xff0c;不同系统和设备之间的通信至关重要。然而&#xff0c;由于技术多样性、厂商差异以及应用需求的复杂性&#xff0c;不同的系统和设备常常采用不同的通信协议&#xff0c;这使得它们之间的直接通信变得困难。为了解决这一问题&#xff0…

新型过滤沉淀池设备优点

新型过滤沉淀池设备优点 磁混凝一体化设备优点&#xff1a; &#xff08;1&#xff09;磁混凝水头损失较少&#xff0c;本质上是混凝沉淀工艺&#xff0c;较过滤水头损失很少&#xff0c;而出水达到过滤的效果。磁混凝滤池低水位差约0.6m&#xff0c;主要体现在沉淀池出水槽跌水…

如何利用Java进行大数据处理?

如何利用Java进行大数据处理&#xff1f; 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 1. 引言 在当今信息爆炸的时代&#xff0c;处理大数据是许多应用程序和系统的核心需求之一。Java作为一种…

单片机软件架构连载(5)-队列

前面讲了指针、结构体之类的基础知识。 这篇内容开始&#xff0c;就要对这些基础知识&#xff0c;做一些复杂的应用了&#xff0c;比如说队列。 其实&#xff0c;在2018年的时候&#xff0c;我录制过一套程序架构的视频&#xff0c;里面有手把手写队列的教程&#xff0c;讲了一…

中国计量大学理学院访问赛氪网:共探校企合作新篇章来

2024年7月5日&#xff0c;中国计量大学理学院代表团莅临环球赛乐&#xff08;北京&#xff09;科技有限公司&#xff0c;进行了一场深入的调研交流活动。代表团成员包括中国计量大学理学院副院长王义康教授、数据科学系副主任刘学艺副教授以及金世举老师。此次访问旨在进一步强…

暑期限定|get你的联邦学习技能,隐私计算暑期夏令营开启报名!

伴随着数字经济时代的来临&#xff0c;数据的安全流通和隐私保护也迎来了新的发展和挑战。隐私技术作为关键技术&#xff0c;可以在保护数据安全的同时&#xff0c;联合多方进行安全计算。 “隐语”是蚂蚁集团于2022年开源的一套可信隐私计算技术框架&#xff0c;支持了包括多…

复合机器人:手脚眼脑的完美结合

在现代工业制造的舞台上&#xff0c;复合机器人如同一位精密而高效的工匠&#xff0c;以其独特的手脚眼脑&#xff0c;正深刻改变着传统的生产方式。这些机器人不仅仅是机械臂的简单延伸&#xff0c;它们汇聚了先进的机械结构、智能的感知系统、精密的控制技术和灵活的思维能力…

js 数组合并方式

1. 使用 concat 方法 》不改变原数组 concat 方法可以将多个数组或值合并成一个新数组。 const arr1 [1, 2, 3] const arr2 [4, 5, 6] const mergedArr arr1.concat(arr2) // [1, 2, 3, 4, 5, 6]2. 使用展开运算符 (...) 》不改变原数组 展开运算符 ... 可以用于展开数组…

Web应用安全实用建议

引言 随着互联网的飞速发展&#xff0c;Web应用已成为企业与用户互动的重要桥梁。然而&#xff0c;Web应用面临着各种安全威胁&#xff0c;这些威胁不仅可能导致数据泄露&#xff0c;还会损害企业的声誉&#xff0c;甚至造成经济损失。为了确保Web应用的安全性&#xff0c;必须…

【虚拟机安装centos7.6 yum使用报错 配置镜像源 错误记录】

错误 [rootlocalhost ~]# yum -y update 已加载插件&#xff1a;fastestmirror Loading mirror speeds from cached hostfileOne of the configured repositories failed (未知),and yum doesnt have enough cached data to continue. At this point the onlysafe thing yum c…

「数据结构」和「数据类型两个概念的本质是什么区别与联系是什么

貌似数据结构中包含了数据类型&#xff0c;而数据类型又建立在数据结构之上&#xff1f; 就像有人在其他评论里说的&#xff0c;数据本质上是没有类型的。我们都知道&#xff0c;数据在存储上是一堆01的数字&#xff0c; 刚好我有一些资料&#xff0c;是我根据网友给的问题精心…

神卓互联共享文件使用教程

#文件共享# 文件共享已成为我们日常生活和工作中不可或缺的一部分。它如同一条无形的纽带&#xff0c;将人们紧密地联系在一起&#xff0c;促进了信息的快速传播和交流。 文件共享的魅力在于其打破了地域和时间的限制。无论我们身处世界的哪个角落&#xff0c;只要有网络连接&a…

【Scrapy】Scrapy 中间件等级设置规则

准我快乐地重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 再去做没流着情泪的伊人 假装再有从前演过的戏份 重饰演某段美丽故事主人 饰演你旧年共寻梦的恋人 你纵是未明白仍夜深一人 穿起你那无言毛衣当跟你接近 &#x1f3b5; 陈慧娴《傻女》 Scrapy 是…

收银系统源码-次卡功能

智慧新零售收银系统是一套线下线上一体化收银系统&#xff0c;给门店提供了含线下收银称重、线上商城、精细化会员管理、ERP进销存、营销活动、移动店务助手等一体化行业解决方案&#xff01; 详细功能见下文&#xff1a; 门店收银系统源码-CSDN博客文章浏览阅读2.6k次&#…

[Python爬虫] 抓取京东商品数据||京东商品API接口采集

本文结构&#xff1a; 一、引言 二、代码分享 三、问题总结 引言 这两天因为一些需求&#xff0c;研究了一下如何爬取京东商品数据。最开始还是常规地使用selenium库进行商品页的商品抓取&#xff0c;后来因为想要获取优惠信息&#xff0c;只能进入到商品详情页进行抓取&#x…