人亦已歌 发表于 2023-2-15 20:52:20

GetDriveType与GetVolumeInformation查询驱动器属性用法总结


#include <stdio.h>
#include <Windows.h>
#include <stdlib.h>
#define BUFSIZE 1024

BOOL GetDriveInfo(LPSTR szDrive){
        UINT uDriveType;
        uDriveType=GetDriveType(szDrive);//返回一个数字表示磁盘类型,如下:
       
        //#define DRIVE_UNKNOWN   0 //未知
        //#define DRIVE_NO_ROOT_DIR 1 //传入的磁盘字符串非根目录
        //#define DRIVE_REMOVABLE   2 //移动硬盘
        //#define DRIVE_FIXED       3 //硬盘
        //#define DRIVE_REMOTE      4 //远程驱动器
        //#define DRIVE_CDROM       5 //光盘
        //#define DRIVE_RAMDISK   6 //U盘
        printf("%s\n",szDrive);
        switch(uDriveType){
                case DRIVE_UNKNOWN:
                        printf("未知磁盘\n");
                        break;
                case DRIVE_NO_ROOT_DIR:
                        printf("非根目录\n");
                        break;
                case DRIVE_REMOVABLE:
                        printf("移动硬盘\n");
                        break;
                case DRIVE_FIXED:
                        printf("硬盘\n");
                        break;
                case DRIVE_REMOTE:
                        printf("远程驱动器\n");
                        break;
                case DRIVE_CDROM:
                        printf("光盘\n");
                        break;
                case DRIVE_RAMDISK:
                        printf("U盘\n");
                        break;
        }

       

        //返回更对的磁盘属性信息
        CHAR dzDriveName;
        DWORD dwVolumeSerialNumber;
        DWORD dwMaximumComponentLength;
        DWORD dwFileSystemFlags;//得到一个数字,需要根据常量来判断
        CHAR szFileSystemNameBuffer;

        if(!GetVolumeInformation(szDrive,
                dzDriveName,//驱动器名
                MAX_PATH,//驱动器名长度
                &dwVolumeSerialNumber,//硬盘序列号
                &dwMaximumComponentLength,//允许的文件名最大长度
                &dwFileSystemFlags,//更多信息,需要根据常量来判断
                szFileSystemNameBuffer,//文件系统名称
                MAX_PATH//文件系统名称长度
                )){
       
                return FALSE;
        };
        if(0!=lstrlen(dzDriveName)){//如果有卷标则输出
                printf("%s\n",dzDriveName);
        }

        printf("硬盘序列号%u\n",dwVolumeSerialNumber);
        printf("允许的文件名最大长度%d\n",dwMaximumComponentLength);
        printf("文件系统名称%s\n",szFileSystemNameBuffer);
        printf("更多信息%d\n",dwFileSystemFlags);
        //更多信息的全部常量如下:
        //#define FILE_SHARE_READ               0x00000001
        //#define FILE_SHARE_WRITE                0x00000002
        //#define FILE_SHARE_DELETE               0x00000004
        //#define FILE_ATTRIBUTE_READONLY             0x00000001
        //#define FILE_ATTRIBUTE_HIDDEN               0x00000002
        //#define FILE_ATTRIBUTE_SYSTEM               0x00000004
        //#define FILE_ATTRIBUTE_DIRECTORY            0x00000010
        //#define FILE_ATTRIBUTE_ARCHIVE            0x00000020
        //#define FILE_ATTRIBUTE_DEVICE               0x00000040
        //#define FILE_ATTRIBUTE_NORMAL               0x00000080
        //#define FILE_ATTRIBUTE_TEMPORARY            0x00000100
        //#define FILE_ATTRIBUTE_SPARSE_FILE          0x00000200
        //#define FILE_ATTRIBUTE_REPARSE_POINT      0x00000400
        //#define FILE_ATTRIBUTE_COMPRESSED         0x00000800
        //#define FILE_ATTRIBUTE_OFFLINE            0x00001000
        //#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED0x00002000
        //#define FILE_ATTRIBUTE_ENCRYPTED            0x00004000
        //#define FILE_ATTRIBUTE_VIRTUAL            0x00010000
        //#define FILE_NOTIFY_CHANGE_FILE_NAME    0x00000001   
        //#define FILE_NOTIFY_CHANGE_DIR_NAME   0x00000002   
        //#define FILE_NOTIFY_CHANGE_ATTRIBUTES   0x00000004   
        //#define FILE_NOTIFY_CHANGE_SIZE         0x00000008   
        //#define FILE_NOTIFY_CHANGE_LAST_WRITE   0x00000010   
        //#define FILE_NOTIFY_CHANGE_LAST_ACCESS0x00000020   
        //#define FILE_NOTIFY_CHANGE_CREATION   0x00000040   
        //#define FILE_NOTIFY_CHANGE_SECURITY   0x00000100   
        //#define FILE_ACTION_ADDED                   0x00000001   
        //#define FILE_ACTION_REMOVED               0x00000002   
        //#define FILE_ACTION_MODIFIED                0x00000003   
        //#define FILE_ACTION_RENAMED_OLD_NAME      0x00000004   
        //#define FILE_ACTION_RENAMED_NEW_NAME      0x00000005   
        //#define MAILSLOT_NO_MESSAGE             ((DWORD)-1)
        //#define MAILSLOT_WAIT_FOREVER         ((DWORD)-1)
        //#define FILE_CASE_SENSITIVE_SEARCH          0x00000001
        //#define FILE_CASE_PRESERVED_NAMES         0x00000002
        //#define FILE_UNICODE_ON_DISK                0x00000004
        //#define FILE_PERSISTENT_ACLS                0x00000008
        //#define FILE_FILE_COMPRESSION               0x00000010
        //#define FILE_VOLUME_QUOTAS                  0x00000020
        //#define FILE_SUPPORTS_SPARSE_FILES          0x00000040
        //#define FILE_SUPPORTS_REPARSE_POINTS      0x00000080
        //#define FILE_SUPPORTS_REMOTE_STORAGE      0x00000100
        //#define FILE_VOLUME_IS_COMPRESSED         0x00008000
        //#define FILE_SUPPORTS_OBJECT_IDS            0x00010000
        //#define FILE_SUPPORTS_ENCRYPTION            0x00020000
        //#define FILE_NAMED_STREAMS                  0x00040000
        //#define FILE_READ_ONLY_VOLUME               0x00080000
        //#define FILE_SEQUENTIAL_WRITE_ONCE          0x00100000
        //#define FILE_SUPPORTS_TRANSACTIONS          0x00200000
        //#define FILE_SUPPORTS_HARD_LINKS            0x00400000
        //#define FILE_SUPPORTS_EXTENDED_ATTRIBUTES   0x00800000
        //#define FILE_SUPPORTS_OPEN_BY_FILE_ID       0x01000000
        //#define FILE_SUPPORTS_USN_JOURNAL         0x02000000
       
        if(dwFileSystemFlags & FILE_VOLUME_QUOTAS){//是否启用了配额
                printf("支持配额\n");
        }

        return TRUE;

}

int main(){
        GetDriveInfo(TEXT("C:\\"));
        system("pause");
        return 0;
}






shinegogo 发表于 2023-2-17 16:12:22

受益非浅,相见恨晚!首先,祝楼主和所有论坛的朋友新年快乐!!!其次,谢谢楼主和我们分享你的经验!!!其实经验也是一种财富!!!谢谢你把你的财富与我们共享!!!看了这篇文章感触颇多!!!其中两点最为深刻!!!1.应聘不成功,只能说明我们不够好!!正应为我们不够好,所以我们必须更加努力!!2.要正视自己,端正自己的目的,不断从自身寻找问题,解决问题!!!我也觉得还是应该学会写,然后才去解决优化的问题顶,学习永远都是无止境的,看来大家都要努力了!!

宿命原创 发表于 2023-2-18 15:26:02

我所说的姐姐是指月无边得罪了!不过你确实太不认真看了

handsomewill 发表于 2023-2-19 10:31:47

我感到一种力量的存在。我是一名刚学VB的学生,看过之后感触很大。我会好好学习这门语言的,谢谢你对我的启发。

SWolf 发表于 2023-2-19 23:36:46

就是这个道理!

zzm800830 发表于 2023-2-21 00:49:33

^好极了

tanjiaxin 发表于 2023-2-22 09:02:28

谢谢你们的留言 ,我看过深感领悟,想不到能在网上看到一些原本上书本看不到的东西。。。。

bsyv520 发表于 2023-2-23 05:12:00

楼主的一篇文章让我深受到编程不是那么简单,而是要人理化!高见,这也就是学无止尽吧,能干其实很简单,真正能干得好,干出名堂来却是相当不容易的。要不然为何中国就出不了闻名于世的软件呢?

MIKESUN 发表于 2023-2-25 02:27:14

我是新手,希望大家多多指教!谢谢!我爱VB!

451230007 发表于 2023-2-26 02:38:52

^你好!我想问你一道题:试分别以顺序表和单链表作存储结构,各写一个实现线性表的就地(既使用尽可能少的附加空间)逆置的算法,在原表的存储空间内将线性表(a1,a2,.....an)逆置为(an,.....,a2,a1).
页: [1] 2 3 4
查看完整版本: GetDriveType与GetVolumeInformation查询驱动器属性用法总结