判断磁盘/U盘 是否 被写保护

   应用程序经常要对磁盘做操作,如拷贝文件,读取文件,列举磁盘之类的。

   在读取文件时会遇到有些移动盘被写保护的情况,通常处理的方式是在对应盘里写个文件判断是否成功,为了跳过系统弹框用SetErrorMode设置一下

   如下代码:

#include <iostream>  
#include <fstream> 
BOOL IsDeviceProtected(char Drive)
{
 BOOL rst = true;
 UINT Mode  = SEM_NOOPENFILEERRORBOX  | SEM_FAILCRITICALERRORS;
 Mode  = SetErrorMode(Mode);  //这样设置之后,就不会弹出错误信息了  
 
 char buf[] = "?:\\ASS.adst";  buf[0] = Drive;
   std::ofstream ofs(buf);
  if (ofs)
  {
    rst = true;
    remove(buf);
    ofs.close();
  }  

   SetErrorMode(Mode); //恢复之前的错误模式
   return rst;
}


  如果是损坏的u盘被写保护,其实还可以根据其特性进行操作。因为损坏的磁盘其文件虽然可以读取,但其文件熟悉,文件名称有可能被破坏,因此可以如此:

#include <io.h>
#include <stdio.h>
BOOL IsDeviceProtected(char Drive)
{
	BOOL rst = true; 
	char buf[] = "?:\\*.*";
	buf[0] = Drive;
	_finddata_t fd; 
	intptr_t pf = _findfirst(buf, &fd);
	if (pf != -1)
	{  
		do
		{
			if (fd.time_access == -1 || fd.time_create == -1 || fd.time_write == -1) //校验时间属性  还可以校验文件属性
			{
				rst = false;
				break;
			}
			printf("%s\n", fd.name);
		} while (!_findnext(pf, &fd));
		_findclose(pf);
	}
	else
		rst = false; 
	return rst;
}

参考:http://bbs.csdn.net/topics/50460388

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值