对U盘做copy file动作,如果不使用stop device这个动作,很多数据都只是在Host端的cache里。那么,如何把这些数据flush出去?FlushFileBuffers有用吗?他的handle是不是U盘的Disk Handle?
解决方案 »
- 28号回家,给家人带点什么呢?
- VC 怎么实现修改文件中的中间一段字符串 不能用MFC
- 现在有150万的用户同时访问我的服务器,采用何种架构会更快速的访问到.比如SINA网是采用的什么架构呢?
- 在CView里显示ICON图片,出错!!!????
- 中文版改不成了英文版啊,我是直接改的rc文件
- 一些问题。望各位能给予指教。
- 哪位高手知道powerpoint里的动画功能是通过什么实现的?
- 大三学生想到成都找个软件公司实习锻炼,请各位指点!谢谢!
- 请教大侠如何在一个非主对话框中增加一个视图,CView或者CScrollView都可以!
- libhttp Post方法设置超时不起作用
- 怎么能操作别的文件的变量——————?
- 关于匿名管道的问题
// 盘号, 0=A:, 1=B:, 2=C:, ...
//对物理磁盘对象无效
BOOL FlushLogical98(WORD nDiskNumber)
{
DWORD dwBytesReturned; WORD dwReturn;
if(g_hDevice==INVALID_HANDLE_VALUE)
{
return 0;
} if(!DeviceIoControl(
g_hDevice,IOCTL_SAMSYS_FLUSH_LOGICAL,
&nDiskNumber,sizeof(WORD),
(LPVOID)&dwReturn,
sizeof(dwReturn),
&dwBytesReturned,NULL ))
{
return 0; //error to access vxd.
} return dwBytesReturned;
}
// 盘号, 0=A:, 1=B:, 2=C:, ...
//对物理磁盘对象无效
BOOL FlushLogicalNT(int nDiskNumber)
{
HANDLE fht;
BOOL bret=FALSE;
char buf[20];
strcpy(buf,"\\\\.\\C:");
buf[4]='A'+nDiskNumber; int i =0 ;
// sprintf(buf,"\\\\.\\PHYSICALDRIVE%d",i); 对物理盘无效。 fht=CreateFile(buf,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,NULL,NULL);
if(fht==INVALID_HANDLE_VALUE)
{
bret= FALSE;
}
if(fht!=INVALID_HANDLE_VALUE)
{
if(FlushFileBuffers(fht)==FALSE)
{
bret=FALSE;
}
else
{
bret=TRUE;
}
} if(fht!=INVALID_HANDLE_VALUE)
CloseHandle(fht); return bret;}
不好意思,这个函数你用不起来,因为我是用驱动实现的。
另一个函数,你可以使用。
如何检查数据有没有被完全写入可以用以下方法:
调用了函数之后,非法关机,看windows是否会对U盘分区进行自检操作,如果不进行自检操作,那么就是刷缓冲成功。