| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Закрытие файла |
| Автор: ZBugz 14.8.2011, 14:20 | ||
Всем причет. Копирую файл в потоке через TFileStream
В форме жду завершения потока и т.д. Дык вот, когда поток завершился, хочу скачать еще раз тоже самое, а он, НЕ ВСЕГДА, но вишет что не может получить доступ к файлу ToFileName. Вроде в моей конструкции, файл 99,9% точно должен быть закрыт.... Но попадаю на эту ошибку. Тык вопрос, как его принудительно закрыть, что бы уже точно 100% был закрыт моей прогой ? Чужие конечно не в счет. |
| Автор: ZBugz 16.8.2011, 18:50 |
| Шо, нихто не знам ? |
| Автор: Snowy 16.8.2011, 19:39 |
| Так в данном коде видно только, что имеется ненужная проверка на nil. А ошибок из данного кода никаких не следует. Описание проблемы тоже ясности не привносит. Так что и сказать нечего... |
| Автор: rodnover 16.8.2011, 20:58 | ||
Хотя, не думаю, что при вызове деструктора этот метод не вызывается. |
| Автор: ZBugz 17.8.2011, 07:19 | ||||||||||
Почему не нужная ? Если ошибка будет до создания TFileStream.Create, а тупо принудительно буду делать тому же ToStream.free кого в природе еще нет, то получать ошибку буду.
Ошибок то нету, только не пойму, это система файл не закрывает или это Delphi так работает...
Качаем файл, останавливаем или ошибка, возобновляем качание сразу же, натыкаюсь на то что конечный файл еще не закрыт... Ошибка, повтор, закачка, все хорошо... Добавлено через 1 минуту и 27 секунд
Я перед закачкой проверяю открытие файла. Я тоже думаю что он отрабатывает IshStream.Close; Хотя нужно проверить |
| Автор: rodnover 17.8.2011, 07:23 | ||
Из-за этого и нету доступа. Потому что дескриптор не закрыт. Используй блоки try {...} finally {...} end При возникновении исключение нужно самому освобождать ресурсы. |
| Автор: ZBugz 18.8.2011, 06:37 | ||||||||||||
Да, конечно, именно через try делаю, в finally делаю освобождение, потом посылаю всообщение и жду завершение потока. Т.е. в теории вообще файл открыт то не должен бы, finally сработал в потоке, да еще жду пока сам поток не завершиться.... А все равно если все шибко быстро сделать, то файл не закрыт... Добавлено через 4 минуты и 53 секунды
Я че то не пойму к чему этот разговор ? Контр предложение почитать статью, где написанно кстати и о free и о destroy (http://www.gunsmoker.ru/2009/04/freeandnil-free.html) Я создаю в потоке
В конце делаю
В чем проблема то ? Или что то не корректно в коде ? Или такое типа нельзя делать что ли ? |