有没有办法知道WriteFileEx或者ReadFileEx读取文件的进度? 我想 让 读取文件进度和一个进度条关联起来,,请问 有没有啥方法知道 已经读取了文件的多少,或者写入了多少,就像CopyFileEx 这个函数似的,能知道复制的进度。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 先读取文件长度,然后每次ReadFileEx回调时,计算当前读取的总长度,然后和文件的总长度一起来自己计算百分比 我这段代码没有调用 回调函数 麻烦帮我看下吧VOID CALLBACK FileIOCompletionRoutine( DWORD dwErrorCode, DWORD dwNumberOfBytesTransfered, LPOVERLAPPED lpOverlapped ){ cout<<" fun"<<dwNumberOfBytesTransfered<<" "<<dwErrorCode<<lpOverlapped<<endl;}int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]){ SECURITY_ATTRIBUTES sa={sizeof(SECURITY_ATTRIBUTES)}; sa.bInheritHandle=false; HANDLE file=CreateFile(TEXT("1.txt"), GENERIC_EXECUTE | GENERIC_READ |GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,&sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); cin.get(); char * buffer=new char[5000]; srand( (unsigned)time( NULL ) ); for(int i=0;i!=5000;i++) { buffer[i]=rand()*i%127; } OVERLAPPED tmp={0}; WriteFileEx(file,buffer,5000,&tmp,FileIOCompletionRoutine); CloseHandle(file); return 0;} CreateFile的第六个参数试试使用FILE_FLAG_OVERLAPPED标志。在网上找找异步文件操作的例子。 试了 ,,windows 核心编程就是这么说的,不管用,不知道哪错了 代码基本上没问题,重点就是没有一个空闲的线程能够让操作系统来处理这个回调函数。最简单就是在WriteFileEx下面加一句SleepEx(1000, TRUE); 看看 给一个简单方法,CreateFile的时候共享模式不要独占,设为可读,然后用另一个文件句柄循环取文件长度,和总长度的比就是进度,进度条一定要单独的线程否则效率极低 有没有这样的方法 就是ReadFileEX 的时候,,用 它的回调函数来确定进度,,就和CopyFileEX 类似的那种 随机数问题 怎样将bmp文件去掉文件头,然后将内容按宽度分成10块存成二进制流的形式文件 怎样更改单文档结构的程序中打开文件的对话框的属性 窗体显示不出来,请各位帮忙调试下!!告诉我一下原因!!! 两个主次对话框如何调换位置? 问一下,有人知道如何判断用户指定的一个新的文件路径是否有效合法的代码么? 下面的dll代码只支持6.0不支持5.0 版本,谁能大致分析下啊 msgina替换问题!!!!!!!!!!!!!! 如何在基于对话框的程序中响应键盘的OnKeyDown()消息? 请问哪儿有VC++ API函数参考手册(电子版的),谢谢... 给注册表里写东东 如何把串口信号转换为USB信号?
VOID CALLBACK FileIOCompletionRoutine(
DWORD dwErrorCode,
DWORD dwNumberOfBytesTransfered,
LPOVERLAPPED lpOverlapped
)
{
cout<<" fun"<<dwNumberOfBytesTransfered<<" "<<dwErrorCode<<lpOverlapped<<endl;
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
SECURITY_ATTRIBUTES sa={sizeof(SECURITY_ATTRIBUTES)};
sa.bInheritHandle=false;
HANDLE file=CreateFile(TEXT("1.txt"), GENERIC_EXECUTE | GENERIC_READ |GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
cin.get();
char * buffer=new char[5000];
srand( (unsigned)time( NULL ) );
for(int i=0;i!=5000;i++)
{
buffer[i]=rand()*i%127;
}
OVERLAPPED tmp={0};
WriteFileEx(file,buffer,5000,&tmp,FileIOCompletionRoutine);
CloseHandle(file);
return 0;
}
在网上找找异步文件操作的例子。
代码基本上没问题,重点就是没有一个空闲的线程能够让操作系统来处理这个回调函数。最简单就是在WriteFileEx下面加一句SleepEx(1000, TRUE); 看看