2024年C C++最新c语言 简单文件监控服务器_,腾讯C C++开发面试经验

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

void DirectoryMonitoring()
{
DWORD cbBytes;
char file_Name[MAX_PATH]; //设置文件名
char file_Name2[MAX_PATH]; //设置文件重命名后的名字
char notify[1024];
int count = 0; //文件数量。可能同时拷贝、删除多个文件,可以进行更友好的提示。
TCHAR *dir = _T(“G:\”);

HANDLE dirHandle = CreateFile(dir, GENERIC\_READ | GENERIC\_WRITE | FILE\_LIST\_DIRECTORY,
	FILE\_SHARE\_READ | FILE\_SHARE\_WRITE,
	NULL,
	OPEN\_EXISTING,
	FILE\_FLAG\_BACKUP\_SEMANTICS,
	NULL);

if (dirHandle == INVALID\_HANDLE\_VALUE) //若网络重定向或目标文件系统不支持该操作,函数失败,同时调用GetLastError()返回ERROR\_INVALID\_FUNCTION
{
	cout << "error" + GetLastError() << endl;
}


memset(notify, 0, strlen(notify));

FILE\_NOTIFY\_INFORMATION \*pnotify = (FILE\_NOTIFY\_INFORMATION\*)notify;
cout << "The system has been started monitoring..." << endl;
while (true)
{

	if (ReadDirectoryChangesW(dirHandle, &notify, 1024, true,
		FILE\_NOTIFY\_CHANGE\_FILE\_NAME |
		FILE\_NOTIFY\_CHANGE\_DIR\_NAME
		| FILE\_NOTIFY\_CHANGE\_SIZE,
		&cbBytes, NULL, NULL))
	{
		//转换文件名为多字节字符串
		if (pnotify->FileName)
		{
			memset(file_Name, 0, strlen(file_Name));

			WideCharToMultiByte(CP\_ACP, 0, pnotify->FileName, pnotify->FileNameLength / 2, file_Name, 99, NULL, NULL);
		}

		//获取重命名的文件名
		if (pnotify->NextEntryOffset != 0 && (pnotify->FileNameLength > 0 && pnotify->FileNameLength < MAX\_PATH))
		{
			PFILE\_NOTIFY\_INFORMATION p = (PFILE\_NOTIFY\_INFORMATION)((char\*)pnotify + pnotify->NextEntryOffset);
			memset(file_Name2, 0, sizeof(file_Name2));
			WideCharToMultiByte(CP\_ACP, 0, p->FileName, p->FileNameLength / 2, file_Name2, 99, NULL, NULL);
		}

		//设置类型过滤器,监听文件创建、更改、删除、重命名等
		switch (pnotify->Action)
		{
		case FILE\_ACTION\_ADDED:
			count++;
			cout << count << setw(5) << "File Add:" << setw(5) << file_Name << endl;
			break;
		case FILE\_ACTION\_MODIFIED:
			cout << "File Modified:" << setw(5) << file_Name << endl;
			break;
		case FILE\_ACTION\_REMOVED:
			count++;
			cout << count << setw(5) << "File Removed:" << setw(5) << file_Name << endl;

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

线、讲解视频,并且后续会持续更新**

如果你需要这些资料,可以戳这里获取

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值