批处理 怎么得到每个的磁盘容量不是分区大小。。。

批处理 怎么得到每个的磁盘容量不是分区大小。。。,第1张

看逻辑分区,可以执行这句:

wmic logicaldisk where mediatype='12' Get description,deviceid,filesystem,size|find ":"

看物理磁盘,可以执行这句:

wmic diskdrive get deviceid,model,size

这篇文章主要介绍了C/C++ 监控磁盘与目录 *** 作的示例,帮助大家更好的理解和学习C/C++编程,感兴趣的朋友可以了解下

遍历磁盘容量:

#include <stdioh>

#include <Windowsh>

void GetDrivesType(const char lpRootPathName)

{

UINT uDriverType = GetDriveType(lpRootPathName);

switch (uDriverType)

{

case DRIVE_UNKNOWN:puts("未知磁盘"); break;

case DRIVE_NO_ROOT_DIR: puts("路径无效"); break;

case DRIVE_REMOVABLE: puts("可移动磁盘"); break;

case DRIVE_FIXED: puts("固定磁盘"); break;

case DRIVE_REMOTE: puts("网络磁盘"); break;

case DRIVE_CDROM: puts("光驱"); break;

case DRIVE_RAMDISK: puts("内存映射盘"); break;

default: break;

}

}

void GetDrivesFreeSpace(const char lpRootPathName)

{

unsigned long long available, total, free;

if (GetDiskFreeSpaceEx(lpRootPathName, (ULARGE_INTEGER)&available,

(ULARGE_INTEGER)&total, (ULARGE_INTEGER)&free))

{

printf("磁盘: %s | 总计: %lld MB 已用: %lld MB 剩余: %lld MB \n",

lpRootPathName, total >> 20, available >> 20, free >> 20);

}

}

int main(int argc,char argv[])

{

DWORD dwSize = MAX_PATH;

char szLogicalDrives[MAX_PATH] = {0};

// 获取逻辑驱动器号字符串

DWORD dwResult = GetLogicalDriveStringsA(dwSize, szLogicalDrives);

if (dwResult > 0 && dwResult <= MAX_PATH) {

char szSingleDrive = szLogicalDrives; // 从缓冲区起始地址开始

while (szSingleDrive) {

//printf("Drive: %s\n", szSingleDrive); // 输出单个驱动器的驱动器号

// GetDrivesType(szSingleDrive);

GetDrivesFreeSpace(szSingleDrive);

szSingleDrive += strlen(szSingleDrive) + 1; // 获取下一个驱动器地址

}

}

system("pause");

return 0;

}

遍历文件特定路径:

循环遍历文件路径,并将文件后缀为exe的路径筛选出来

#include <stdioh>

#include <windowsh>

#include <tlhelp32h>

void SearchFile(char pszDirectory)

{

// 搜索指定类型文件

char pszFileName = NULL;

char pTempSrc = NULL;

WIN32_FIND_DATA FileData = { 0 };

// 申请动态内存

pszFileName = new char[2048];

pTempSrc = new char[2048];

// 构造搜索文件类型字符串 表示搜索所有文件类型

wsprintf(pszFileName, "%s\\", pszDirectory);

HANDLE hFile = ::FindFirstFile(pszFileName, &FileData);

if (INVALID_HANDLE_VALUE != hFile)

{

do

{

// 过滤掉当前目录"" 和上一层目录""

if ('' == FileDatacFileName[0])

continue;

// 拼接文件路径

wsprintf(pTempSrc, "%s\\%s", pszDirectory, FileDatacFileName);

// 判断是否是目录还是文件

if (FileDatadwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)

SearchFile(pTempSrc); // 如果是目录则继续递归

else

{

char drive[_MAX_DRIVE], dir[_MAX_DIR], fname[_MAX_FNAME], ext[_MAX_EXT];

_splitpath(pTempSrc, drive, dir, fname, ext);

// 如果是文件并且后缀为exe则输出具体路径

if (strcmp(ext, "exe") == 0)

printf("%s \n", pTempSrc);

}

} while (::FindNextFile(hFile, &FileData));

}

FindClose(hFile);

delete[]pTempSrc;

delete[]pszFileName;

}

int main(int argc, char argv[])

{

SearchFile("c:\\MinGW7");

system("pause");

return 0;

}

监控文件目录变化:

#include <stdioh>

#include <windowsh>

#include <tlhelp32h>

UINT MonitorFileThreadProc(LPVOID lpVoid)

{

char pszDirectory = (char )lpVoid;

// 打开目录, 获取文件句柄

HANDLE hDirectory = CreateFile(pszDirectory, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE,

NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);

if (INVALID_HANDLE_VALUE == hDirectory)

return 1;

char szFileName[MAX_PATH] = { 0 };

BOOL bRet = FALSE;

DWORD dwRet = 0;

DWORD dwBufferSize = 2048;

// 申请一个足够大的缓冲区

BYTE pBuf = new BYTE[dwBufferSize];

if (NULL == pBuf)

return 2;

FILE_NOTIFY_INFORMATION pFileNotifyInfo = (FILE_NOTIFY_INFORMATION )pBuf;

// 开始循环设置监控

do

{

RtlZeroMemory(pFileNotifyInfo, dwBufferSize);

// 设置监控目录

bRet = ReadDirectoryChangesW(hDirectory, pFileNotifyInfo, dwBufferSize, TRUE,

FILE_NOTIFY_CHANGE_FILE_NAME | // 修改文件名

FILE_NOTIFY_CHANGE_ATTRIBUTES | // 修改文件属性

FILE_NOTIFY_CHANGE_LAST_WRITE, // 最后一次写入

&dwRet, NULL, NULL);

if (FALSE == bRet)

break;

// 将宽字符转换成窄字符,宽字节字符串转多字节字符串

WideCharToMultiByte(CP_ACP, 0, (wchar_t )(&pFileNotifyInfo->FileName),

(pFileNotifyInfo->FileNameLength / 2),szFileName,MAX_PATH,NULL,NULL);

// 将路径与文件连接成完整文件路径

char FullFilePath[1024] = { 0 };

strncpy(FullFilePath, pszDirectory, strlen(pszDirectory));

strcat(FullFilePath, szFileName);

// 判断 *** 作类型并显示

switch (pFileNotifyInfo->Action)

{

case FILE_ACTION_ADDED:

printf("文件被 [创建]: %s \n", FullFilePath); break;

case FILE_ACTION_REMOVED:

printf("文件被 [删除]: %s \n", FullFilePath); break;

case FILE_ACTION_MODIFIED:

printf("文件被 [修改]: %s \n", FullFilePath); break;

case FILE_ACTION_RENAMED_OLD_NAME:

printf("文件被 [重命名]: %s \n", FullFilePath); break;

}

} while (bRet);

CloseHandle(hDirectory);

delete[] pBuf;

pBuf = NULL;

return 0;

}

int main(int argc, char argv[])

{

char pszDirectory = "C:\\";

// 创建线程开始监控

CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MonitorFileThreadProc, pszDirectory, 0, NULL);

while (1)

{

Sleep(10000);

}

system("pause");

return 0;

}

监控目录文件变化:

可以将其改为一个简单的文件防篡改程序,也可以用来监控病毒的行为

#include <stdioh>

#include <Windowsh>

#include <tlhelp32h>

DWORD WINAPI MonitorFileThreadProc(LPVOID lParam)

{

char pszDirectory = (char )lParam;

BOOL bRet = FALSE;

BYTE Buffer[1024] = { 0 };

FILE_NOTIFY_INFORMATION pBuffer = (FILE_NOTIFY_INFORMATION )Buffer;

DWORD dwByteReturn = 0;

HANDLE hFile = CreateFile(pszDirectory, FILE_LIST_DIRECTORY, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,

NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);

if (INVALID_HANDLE_VALUE == hFile)

return 1;

while (TRUE)

{

ZeroMemory(Buffer, sizeof(Buffer));

// 设置监控目录回调函数

bRet = ReadDirectoryChangesW(hFile,&Buffer,sizeof(Buffer),TRUE,

FILE_NOTIFY_CHANGE_FILE_NAME | // 修改文件名

FILE_NOTIFY_CHANGE_ATTRIBUTES | // 修改文件属性

FILE_NOTIFY_CHANGE_LAST_WRITE, // 最后一次写入

&dwByteReturn, NULL, NULL);

if (TRUE == bRet)

{

char szFileName[MAX_PATH] = { 0 };

// 将宽字符转换成窄字符,宽字节字符串转多字节字符串

WideCharToMultiByte(CP_ACP,0,pBuffer->FileName,(pBuffer->FileNameLength / 2),

szFileName,MAX_PATH,NULL,NULL);

// 将路径与文件连接成完整文件路径

char FullFilePath[1024] = { 0 };

strncpy(FullFilePath, pszDirectory, strlen(pszDirectory));

strcat(FullFilePath, szFileName);

switch (pBuffer->Action)

{

case FILE_ACTION_ADDED:

{

printf("添加: %s \n", FullFilePath); break;

}

case FILE_ACTION_REMOVED:

{

printf("删除: %s \n", FullFilePath); break;

}

case FILE_ACTION_MODIFIED:

{

printf("修改: %s \n", FullFilePath); break;

}

case FILE_ACTION_RENAMED_OLD_NAME:

{

printf("重命名: %s", szFileName);

if (0 != pBuffer->NextEntryOffset)

{

FILE_NOTIFY_INFORMATION tmpBuffer = (FILE_NOTIFY_INFORMATION )

((DWORD)pBuffer + pBuffer->NextEntryOffset);

switch (tmpBuffer->Action)

{

case FILE_ACTION_RENAMED_NEW_NAME:

{

ZeroMemory(szFileName, MAX_PATH);

WideCharToMultiByte(CP_ACP,0,tmpBuffer->FileName,

(tmpBuffer->FileNameLength / 2),

szFileName,MAX_PATH,NULL,NULL);

printf(" -> %s \n", szFileName);

break;

}

}

}

break;

}

case FILE_ACTION_RENAMED_NEW_NAME:

{

printf("重命名(new): %s \n", FullFilePath); break;

}

}

}

}

CloseHandle(hFile);

return 0;

}

int main(int argc, char argv[])

{

char pszDirectory = "C:\\";

HANDLE hThread = CreateThread(NULL, 0, MonitorFileThreadProc, pszDirectory, 0, NULL);

WaitForSingleObject(hThread, INFINITE);

CloseHandle(hThread);

return 0;

}

以上就是C/C++ 监控磁盘与目录 *** 作的示例的详细内容

Ubuntu 查看文件以及磁盘空间大小管理

(1)查看文件大小

查看当前文件夹下所有文件大小(包括子文件夹)

du -sh

# du -h

15M /package

16K /fontconfig

40K /cache

51M /rpmdb

20M

查看指定文件夹下所有文件大小(包括子文件夹)

# du -h ftp

38G ftp/sanya/doc

38G ftp/sanya

40K ftp/testftp/doc

14M ftp/testftp

875M ftp/platform/doc/002-录像

27M ftp/platform/doc/001-PDF

52M ftp/platform/doc/BBFlash

12G ftp/platform/doc/003-录音

21G ftp/platform/doc

21G ftp/platform

40K ftp/pmo/doc

20K ftp/pmo

36M ftp/uf/doc/innovate-201207

36M ftp/uf/doc

36M ftp/uf

446M ftp/code/doc

446M ftp/code

63G ftp

查看指定文件大小

# du -h /package/compat-libstdc++-33-323-69el6x86_64rpm

184K /package/compat-libstdc++-33-323-69el6x86_64rpm

查看指定文件夹大小

# du -hs ftp

63G ftp

用法:du [选项] [文件]

或:du [选项] --files0-from=F

计算每个文件的磁盘用量,目录则取总用量。

长选项必须使用的参数对于短选项时也是必需使用的。

-a, --all 输出所有文件的磁盘用量,不仅仅是目录

--apparent-size 显示表面用量,而并非是磁盘用量;虽然表面用量通常会

小一些,但有时它会因为稀疏文件间的"洞"、内部碎

片、非直接引用的块等原因而变大。

-B, --block-size=大小 使用指定字节数的块

-b, --bytes 等于--apparent-size --block-size=1

-c, --total 显示总计信息

-D, --dereference-args 解除命令行中列出的符号连接

--files0-from=F 计算文件F 中以NUL 结尾的文件名对应占用的磁盘空间

如果F 的值是"-",则从标准输入读入文件名

-H 等于--dereference-args (-D)

-h, --human-readable 以可读性较好的方式显示尺寸(例如:1K 234M 2G)

--si 类似-h,但在计算时使用1000 为基底而非1024

-k 等于--block-size=1K

-l, --count-links 如果是硬连接,就多次计算其尺寸

-m 等于--block-size=1M

-L, --dereference 找出任何符号链接指示的真正目的地

-P, --no-dereference 不跟随任何符号链接(默认)

-0, --null 将每个空行视作0 字节而非换行符

-S, --separate-dirs 不包括子目录的占用量

-s, --summarize 只分别计算命令列中每个参数所占的总用量

-x, --one-file-system 跳过处于不同文件系统之上的目录

-X, --exclude-from=文件 排除与指定文件中描述的模式相符的文件

--exclude=PATTERN 排除与PATTERN 中描述的模式相符的文件

以上就是关于批处理 怎么得到每个的磁盘容量不是分区大小。。。全部的内容,包括:批处理 怎么得到每个的磁盘容量不是分区大小。。。、监控磁盘大小c语言、如何查看Linux磁盘空间大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10149034.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存