主题:文件的读写问题
在一个循环中,我用CreateFile,WriteFile和CloseHande函数建立一系列文件,为什么新建的文件在资源管理器中文件不是一个一个的显示出来,而是要等到循环结束,所有的文件都完成才一起显示?[em10]
for(i=lpginfo->nSelectedStart;i<=lpginfo->nSelectedEnd;i++)
{
nFileStart = i/nStackTrace- lpginfo->nStackNum +1;
if(nFileStart < 0) nFileStart =0;
nFileEnd = i / nStackTrace;
if(nFileEnd >= lpginfo->nFileCount) nFileEnd = lpginfo->nFileCount-1;
nStartIndex = i-nFileEnd*nStackTrace;
rOffset2 = rOffset1+rSpacing1*nStartIndex;
seishd.nOffsetInt = (int)rOffset2;
seishd.nOffsetDec = (int)((rOffset2-seishd.nOffsetInt)*100.0);
seishd.nRecordNum = lpginfo->iDigitsValue2+(i-lpginfo->nSelectedStart)*lpginfo->nIncrement2;
seishd.nTraceCount = nFileEnd-nFileStart+1;
while(nFileEnd > nFileRead)
{
nFileRead++;
wsprintf(lpFileName,lpginfo->lpFmtFile1,lpginfo->iDigitsValue1+nFileRead*lpginfo->nIncrement1);
result = MyReadFile(lpFileName,(LPVOID)(lpMemory+(nFileRead%lpginfo->nStackNum)*nBaseSize2),512,nBaseSize2);
if(!result) break;
}
if(!result) break;
wsprintf(lpFileName,lpginfo->lpFmtFile2,seishd.nRecordNum);
hFile = CreateFile(lpFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE) {result = FALSE; break;}
WriteFile(hFile,(LPVOID)&seishd,sizeof(SEISHEADER),&nBytesWritten,NULL);
SetFilePointer(hFile,512,NULL,FILE_BEGIN);
for(j=0;j<seishd.nTraceCount;j++)
{
nMemoryOffset = ((nFileEnd-j)%lpginfo->nStackNum)*nBaseSize2+(nStartIndex+j*nStackTrace)*nBaseSize1;
WriteFile(hFile,(LPVOID)(lpMemory+nMemoryOffset),nBaseSize1,&nBytesWritten,NULL);
}
CloseHandle(hFile);
}
for(i=lpginfo->nSelectedStart;i<=lpginfo->nSelectedEnd;i++)
{
nFileStart = i/nStackTrace- lpginfo->nStackNum +1;
if(nFileStart < 0) nFileStart =0;
nFileEnd = i / nStackTrace;
if(nFileEnd >= lpginfo->nFileCount) nFileEnd = lpginfo->nFileCount-1;
nStartIndex = i-nFileEnd*nStackTrace;
rOffset2 = rOffset1+rSpacing1*nStartIndex;
seishd.nOffsetInt = (int)rOffset2;
seishd.nOffsetDec = (int)((rOffset2-seishd.nOffsetInt)*100.0);
seishd.nRecordNum = lpginfo->iDigitsValue2+(i-lpginfo->nSelectedStart)*lpginfo->nIncrement2;
seishd.nTraceCount = nFileEnd-nFileStart+1;
while(nFileEnd > nFileRead)
{
nFileRead++;
wsprintf(lpFileName,lpginfo->lpFmtFile1,lpginfo->iDigitsValue1+nFileRead*lpginfo->nIncrement1);
result = MyReadFile(lpFileName,(LPVOID)(lpMemory+(nFileRead%lpginfo->nStackNum)*nBaseSize2),512,nBaseSize2);
if(!result) break;
}
if(!result) break;
wsprintf(lpFileName,lpginfo->lpFmtFile2,seishd.nRecordNum);
hFile = CreateFile(lpFileName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile == INVALID_HANDLE_VALUE) {result = FALSE; break;}
WriteFile(hFile,(LPVOID)&seishd,sizeof(SEISHEADER),&nBytesWritten,NULL);
SetFilePointer(hFile,512,NULL,FILE_BEGIN);
for(j=0;j<seishd.nTraceCount;j++)
{
nMemoryOffset = ((nFileEnd-j)%lpginfo->nStackNum)*nBaseSize2+(nStartIndex+j*nStackTrace)*nBaseSize1;
WriteFile(hFile,(LPVOID)(lpMemory+nMemoryOffset),nBaseSize1,&nBytesWritten,NULL);
}
CloseHandle(hFile);
}