Есть у меня утилитка DeployFolder (http://alhymov.blogspot.ru/2013/12/deployfolder.html), которая текстовый файл меняет. Файл - проект Делфи. Т.е. XML, но без заголовка. И как этот заголовок отрезать, я не знаю (может, кто надоумит?). Поэтому тупо взял, записанный на диск XML всосал в TStringList, ну и, после удаления верхней строки, записал обратно.
Сначала всё было хорошо, а потом - как-то не очень: ругань пошла о занятом файле. Я, поскольку утилитка-то из Дельфи-студии запускается, решил, что Дельфи его как-то блокирует. Причём маленькие проекты - ОК, а большие - плохо. Тогда я стал проект в Дельфи ручками закрывать перед запуском утилиты, и как-бы стало работать. А потом прошло время, и - опять 25!
Ну, понял я - дело не в Делфи. Наверно, в Винде дело - она не успевает от предыдущей записи отблокироваться. Бред, конечно, но мозгный натиск не сразу Измаил берёт.
И вот я так думал-думал, и - придумал! Т.е. догадался! Проект, который "блокируется" - лежит в DropBox-е, и я его там и пользую. А если посмотреть в проводник, то в окошке этом очень хорошо видно, что на файликах значки меняются - DropBox апдэйтит файлы. А когда DropBox апдэйтит файлы, то что? - правильно! - файл блокируется от внешних посягательств.
Э! - сказали мы с Петром Ивановичем (Это я так раздваиваю свою личность иногда) - так надо же самому первому блокировку положить! Но как вспомнишь про Win32 API, так что-то хочется ещё немного подумать.
Решил я мысль свою в блоге отразить, и по ходу изложения (слава блогу!) догадался, что глупый я, однако, совсем! Зачем же я на диск пишу, и потом тут же считываю, если можно в памятный поток всё сложить, и к диску обращаться только однажды!
Вот сколько буковок из себя выдавил. А смысл - избаловали нас ПК, а не всё, что прокатывает в нормальных условиях, прокатывает в распределённой системе, в DropBox-е. Т.е. польза от буковок должна быть. А мыслеметания бредовые свои я здесь изложил, чтобы читатель понял, что он-то гораздо умнее, и было бы ему от этого очень приятно мои буковки читать. Т.е. полезное с приятным. Так, мне кажется, в мире будет больше счастья и радости.
Итого. Было:
XMLDocument1.SaveToFile( XMLDocument1.FileName ); XMLDocument1.Active := False; ShowStatus( 'Set standard header' ) ; with TStringList.Create do try LoadFromFile( XMLDocument1.FileName ); Delete( 0 ); SaveToFile( XMLDocument1.FileName ); finally Free; end;
Стало:
Memory := TMemoryStream.Create; try // XMLDocument1.SaveToFile( XMLDocument1.FileName ); XMLDocument1.SaveToStream( Memory ); XMLDocument1.Active := False; ShowStatus( 'Set standard header' ) ; with TStringList.Create do try // LoadFromFile( XMLDocument1.FileName ); Memory.Position := 0; LoadFromStream( Memory ); Delete( 0 ); SaveToFile( XMLDocument1.FileName ); finally Free; end; finally FreeAndNil( Memory ); end;
Жизнь покажет, будет ли теперешнее отсутствие ошибок постоянным. А читателя благодарю за внимание и надеюсь, что грабли сии минуют его, а сам я буду впредь рачительнее использовать вычислительные ресурсы.
Комментариев нет:
Отправить комментарий