C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Последовательная запись в файл
YanMinsk
Отправлено: 11.09.2004, 01:05


Не зарегистрирован







Добрый день!
Подскажите как сделать последовательную запись в файл, т.е. у меня в цикле происходит запись информации в файлы, проблема заключается в том, что цикл уже выполнился(прогресс бар пробежал), а запись на диск все еще происходит. Я так понимаю, что запись идет сначало в какой-то буфер, а затем уже на диск. Как от этого избавиться?
Вот код:
for(..........)
{................
BYTE *pbData=new BYTE[10];
ZeroMemory(pbData,10);

HANDLE LFile=CreateFile((DirName+"\"+sr.Name).c_str(), GENERIC_WRITE|GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL, NULL);
OVERLAPPED ovlp;
ovlp.OffsetHigh=0;
ovlp.hEvent=NULL;
ovlp.Offset=sr.Size;

WriteFile(LFile,pbData,10,NULL,&ovlp);

ovlp.Offset=sr.Size-1;
DWORD nBytesToRead=10;
ReadFile(LFile, &pbData, nBytesToRead, &nBytesToRead,&ovlp);
...............................
}
klen
Отправлено: 11.09.2004, 10:41


Машинист паровоза

Группа: Участник
Сообщений: 239



The FlushFileBuffers function clears the buffers for the specified file and causes all buffered data to be written to the file.

BOOL FlushFileBuffers(
HANDLE hFile // open handle to file whose buffers are to be flushed
);


Parameters

hFile

An open file handle. The function flushes this file's buffers. The file handle must have GENERIC_WRITE access to the file.
If hFile is a handle to a communications device, the function only flushes the transmit buffer.
If hFile is a handle to the server end of a named pipe, the function does not return until the client has read all buffered data from the pipe.
Windows NT: The function fails if hFile is a handle to console output. That is because console output is not buffered. The function returns FALSE, and GetLastError returns ERROR_INVALID_HANDLE.

Windows 95: The function does nothing if hFile is a handle to console output. That is because console output is not buffered. The function returns TRUE, but it does nothing.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

The WriteFile and WriteFileEx functions typically write data to an internal buffer that the operating system writes to disk on a regular basis. The FlushFileBuffers function writes all of the buffered information for the specified file to disk.
You can pass the same file handle used with the _lread, _lwrite, _lcreat, and related functions to FlushFileBuffers.

Вернуться в Вопросы программирования в C++Builder