VC++ U盘自动扫描

#include <iostream>
#include <io.h>
#include <fstream>
#include <Windows.h>

int traverseDir(const std::string &_dir);
/// @brief : `traverseDir` call `traverseRoute`
/// @param : _filePath file abs path
/// @param : _fileData file information
/// @remark:
int traverseRoute(const std::string &_filePath,
	const _finddata_t &_fileData);

char dictionary(unsigned long _disk);

int main(void) {

	unsigned long old_disk = GetLogicalDrives();
	
	unsigned long ret_disk = 0;

	do {
		Sleep(1000);
		// get disk
		ret_disk = GetLogicalDrives();

		if (ret_disk >= old_disk) {

			// get new disk
			unsigned long new_disk = old_disk ^ ret_disk;

			if (new_disk) {
				// get drive
				char disk = dictionary(new_disk);
				const std::string& disk_path = disk + std::string(":/");
				traverseDir(disk_path);
			}

		}
		// modify old disk
		old_disk = ret_disk;
	} while (true);
	getchar();
	return 0;
}


char dictionary(unsigned long _disk) {
	char dict = 'A';
	int i = 0;
	for (; i < 26; i++) {
		bool flag = _disk & 0x1;
		if (flag) {
			break;
		}
		_disk >>= 1;
	}
	return dict + i;
}

int traverseRoute(const std::string &_filePath,
	const _finddata_t &_fileData) {
	std::string file_name = _filePath + "\\" + _fileData.name;
#if defined(_DEBUG)
	std::cout << _filePath.c_str() << ":" << _fileData.name << std::endl;
#endif
	

	return 0;
}


int traverseDir(const std::string &_dir) {
	std::string dir_new = _dir + "\\*.*";

	intptr_t handle;
	_finddata_t file_data;

	handle = _findfirst(dir_new.c_str(), &file_data);
	// check file
	if (handle == -1)
		return -1;

	do {
		if (file_data.attrib & _A_SUBDIR) {
			if (strcmp(file_data.name, ".") == 0 || strcmp(file_data.name, "..") == 0)
				continue;

			// add to directory "\\"
			dir_new = _dir + '\\' + file_data.name;
			traverseDir(dir_new);
		}
		else
			traverseRoute(_dir, file_data);

	} while (0 == _findnext(handle, &file_data));
	_findclose(handle);
	return 0;
}

安全卫士就好似身边的护卫,一旦反叛,安全就只是一纸空谈。


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值