问题来源:
一个文件可以定位多个文件指针吗
比如说现在有个文件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,所以改用了内存映射,还请大家看看这个函数如何使用,谢谢!