•  

ГлавнаяIndyЧастые вопросы по Indy → При повторном сохранении файла с тем же именем INVALID_HANDLE_VALUE

Создано: 24.05.2014 23:22:46 · Исправлено: 24.05.2014 23:22:46 · Прочтений: 766

Подскажите, пожалуйста, что я делаю не так.
Я сохраняю файл картинки (sData - результат работы get в Indy):

var hFile: THandle;
BytesWritten: DWord;
...
hFile := Windows.CreateFile(PChar(sFileName), GENERIC_WRITE, FILE_SHARE_READ, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
if hFile <> INVALID_HANDLE_VALUE then
begin
Windows.WriteFile(hFile, PChar(sData)^, Length(sData), BytesWritten, nil);
CloseHandle(hFile);
end;
Этот код в ходе работы программы вызывается несколько раз (картинка перезаписывается - sFileName не меняется). Так вот при повторном вызове этого кода hFile = INVALID_HANDLE_VALUE. Почему?
Ответ знают GetLastError, RaiseLastOsError
Да, через GetLastError уже проверял. Ошибка 32 - файл занят другим процессом.

Но я вроде нашел в чем была ошибка - данный файл потом через indy отправлялся. Так вот, если сформированную для отправки запись не освободить (не сделать TMultiPart-чего-то-там.Free), то Indy обращение к файлу не закрывает.