问题来源:
一个文件可以定位多个文件指针吗
比如说现在有个文件10个字节
我用2个线程写
第一个线程从前面写,写前5个字节
第二个线程从后面开始写,也是5个字节
能实现吗
代码:
#include<windows.h> #include<process.h> #include<iostream> using namespace std; #define BUFSIZE 5 HANDLE hFile; DWORD __stdcall CreateThreadFunc(LPVOID) { cout<<"进入子线程"<<endl; SetFilePointer(hFile,5,0,FILE_BEGIN); char chBuffer[BUFSIZE]; memcpy(chBuffer,"a boy",5); DWORD dwWriteSize=0; WriteFile(hFile,chBuffer,5,&dwWriteSize,NULL); return 0; } int main() { hFile=CreateFile("test.txt",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); cout<<GetLastError()<<endl; //SetFileValidData(hFile,10); HANDLE hFileMap=CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,10,NULL); cout<<GetLastError()<<endl; char chBuffer[BUFSIZE]; memcpy(chBuffer,"yirui",5); DWORD dwWriteSize=0; SetFilePointer(hFile,0,0,FILE_END); WaitForSingleObject(CreateThread(NULL,0,CreateThreadFunc,0,0,0),INFINITE); WriteFile(hFile,chBuffer,5,&dwWriteSize,NULL); CloseHandle(hFileMap); CloseHandle(hFile); return 0; }
测试过程中发现不会使用SetFileValidData,所以改用了内存映射,还请大家看看这个函数如何使用,谢谢!