欲打开“网络监视器”,只需依次选择“开始→程序→附件→系统工具→网络监视器”即可进入其主窗口。
对于“网络监视器”中的功能,既可以选择菜单中的相应项目,也可以通过直接单击工具栏上的相应按钮来实现。在其主窗口工具栏上的按钮,从左到右作用依次为:
1.选择服务器:通过它可对其他计算机的“网络监视器”进行远程管理。具体的使用方法请参见后文相关内容。
2.断开用户连接:通过它可强行中断列表中指定用户对本机的连接。
3.关闭文件:通过它可强行关闭列表中指定用户所打开的指定共享文件。
4.添加共享:通过它可根据提示直接添加本机的共享资源,并为它设置相应权限。
5.停止共享:通过它可停止列表中指定资源的共享。
6.显示用户:这相当于选“查看”菜单中的“按连接”项,它是“网络监视器”主窗口的默认状态,也是最常用的窗口。此处可以查看到已连接到本机的客户机的用户名、计算机名、打开了些什么共享资源、打开些什么文件以及连接的时间和空闲的时间等资料。当客户机断开连接之后它就会自动从此列表中消失。
7.显示共享的文件夹:这相当于选“查看”菜单中的“按共享的文件夹”项。它可以查看本机已共享的资源及其共享名和权限;可添加共享,停止共享,修改共享等。
8、显示文件:这相关于选“查看”菜单中的“按打开的文件”项。它可以查看已打开的本服务器文件;可关闭文件等。
三、“网络监视器”的远程监视
本文上面部分已经讲过“网络监视器”在本地计算机上的基本使用方法,但实际上在一定条件满足的情况下,它也可以对局域网内的其他计算机进行完全相同的远程管理。请进行如下的 *** 作:
1.启用远程管理
在远程计算机上,先进入其“控制面板→密码→远程管理”窗口,再勾选中“启用此服务器的远程管理”,接着在相应位置输入密码后按“确定”按钮保存退出。
2.使用远程管理
在本地计算机上,先进入“网络监视器”的主窗口,再选“管理员”菜单中的“选择服务器”项,在“请输入要进行管理的服务器名”的提示窗口中的“名称”处输入远程计算机的名字(比如为zhuyan),然后按“确定”按钮继续;系统接着会提示“必须提供密码才能连接”,则请在“密码”后输入“启用远程管理”一步中所设的密码值,最后按“确定”按钮即可得到新的“网络监视器”的窗口,里面当然是远程计算机的共享内容了,你所要做的,就是进行正常 *** 作就可以啦!
注意:
1.如果在“使用远程管理” *** 作中,当进行到输入密码一步勾选中了“请将密码保存到密码列表”项,则当你以后再连接到远程计算机时就不用输入密码了。
2.如果要想修改共享文件夹名或其权限设置,则需要在“显示共享的文件夹”窗口中,先在列表中选中该用户,然后按键盘上的ALT+ENTER键(或者选“管理员”菜单中的“共享文件夹的属性”项),再根据提示进行 *** 作即可。
调用CFilestatue结构体中的m_atime和m_mtime就可以了.CFileStatus stat
file.GetStatus(stat) //getstatus获取文件信息等
// stat.m_ctime 创建时间
// stat.m_atime 访问时间
// stat.m_mtime 修改时间
// stat.m_size 文件大小、
这篇文章主要介绍了C/C++ 监控磁盘与目录 *** 作的示例,帮助大家更好的理解和学习C/C++编程,感兴趣的朋友可以了解下遍历磁盘容量:
#include <stdio.h>
#include <Windows.h>
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 <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
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 ('.' == FileData.cFileName[0])
continue
// 拼接文件路径
wsprintf(pTempSrc, "%s\\%s", pszDirectory, FileData.cFileName)
// 判断是否是目录还是文件
if (FileData.dwFileAttributes &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 <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
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 <stdio.h>
#include <Windows.h>
#include <tlhelp32.h>
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++ 监控磁盘与目录 *** 作的示例的详细内容
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)