Win32学习笔记(20)文件系统

本文介绍了Windows文件系统的概念,如NTFS和FAT32的区别,并通过API详细讲解了如何获取卷信息、创建删除目录、管理文件属性以及读写文件等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.文件系统

文件系统时操作系统用于管理磁盘上文件的方法和数据结构;简单点说就是在磁盘上如何组织文件的方法(可以理解为:任何东西存到硬盘上都是0和1不过怎么组织由文件系统决定)

文件系统 NTFS FAT32
磁盘分区容量 2T 32G
单个文件容量 4G以上 最大4G
EFS加密 支持 不支持
磁盘配额 支持 不支持

那么在哪看我们的硬盘是什么文件系统?

就比如我的C盘:我们右键点击属性

 

看到是NTFS。

1.NTFS磁盘最大2T,FAT32最大32G

2.NTFS单个文件容量4G以上,FAT32最大4G

3.接下来什么是EFS加密呢?

我们随意创建一个文件,右键属性点击高级

 

这里就是EFS加密。不过我的win10家庭版不能勾选,网上也有解决方案,可以网上查找。

加密后如果你切换一个用户那么他就无法打开了。

4.磁盘配额:我们右键C盘->属性

 

使用磁盘配额,我们可以限制别人使用磁盘空间。

2.卷相关API:NTFS和FAT32最上层的组织形式称为卷

卷:我们可以理解为虚拟逻辑驱动器(你真正的硬盘可能是80G,在装系统是可能分成4份每个20G我们把这每份称为卷)

文件系统三次结构:卷->目录->文件

<1>获取卷

GetLogicalDrives()

这个API是有返回值的我们查看官方文档:如果函数成功,则返回值是表示当前可用磁盘驱动器的位掩码。位位置 0(最低有效位)是驱动器 A,位位置 1 是驱动器 B,位位置 2 是驱动器 C,依此类推。

这句话什么意思呢?我们看代码

#include"stdafx.h"
#include<stdio.h>
#include<Windows.h>
VOID TestVolumn()
{
    //1.获取卷
    DWORD dwLogicalDrives = GetLogicalDrives();
    printf("%x", dwLogicalDrives);
}
int main(int argc, char* argv[])
{
    //1.系统驱动器
    TestVolumn();
    return 0;
}

输出:

 

输出的值是c转换为二进制为1100最低位为0接着是0 1 1也就是说我的电脑有C盘和D盘没有AB盘

<2>获取一个所卷的盘符的字符串

GetLogicalDrives():获取逻辑驱动器字符串

DWORD GetLogicalDriveStringsA(
  [in]  DWORD nBufferLength,//要获取多少
  [out] LPSTR lpBuffer//设定一个缓冲,把得到的串放到缓冲
);
示例代码:

#include"stdafx.h"
#include<stdio.h>
#include<Windows.h>
VOID TestVolumn()
{
    //1.获取卷
    /*DWORD dwLogicalDrives = GetLogicalDrives();
    printf("%x", dwLogicalDrives);*/
​
    //2.获取一个所卷的盘符的字符串
    DWORD dwMaxLength = 100;
    char szBuffer[100];
    GetLogicalDriveStringsA(dwMaxLength, szBuffer);
    
}
int main(int argc, char* argv[])
{
    //1.系统驱动器
    TestVolumn();
    return 0;
}

我们在调试的时候监视

 

可以看到C : \\结束 D : \\结束

<3>获取卷的类型:每一个卷都有类型你是光驱还是硬盘可以由下面的函数获取

GetDriveType()

UINT GetDriveTypeA(
  [in, optional] LPCSTR lpRootPathName
);

这个函数有返回值,查询官方文档

 

代码如下

#include"stdafx.h"
#include<stdio.h>
#include<Windows.h>
VOID TestVolumn()
{
    //1.获取卷
    /*DWORD dwLogicalDrives = GetLogicalDrives();
    printf("%x", dwLogicalDrives);*/
​
    //2.获取一个所卷的盘符的字符串
    /*DWORD dwMaxLength = 100;
    char szBuffer[100];
    GetLogicalDriveStringsA(dwMaxLength, szBuffer);*/
    //3.获取卷的类型
    UINT uType = GetDriveTypeA("C:\\");
    printf("%d", uType);
}
int main(int argc, char* argv[])
{
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wzprabbit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值