看逻辑分区,可以执行这句:
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磁盘空间大小等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)