Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.08.2013, 02:11   #1
Jekerterim
Новичок
Джуниор
 
Регистрация: 17.08.2013
Сообщений: 3
По умолчанию Глобальная блокировка файлов в ZipForge

Добрый день!

Пытаюсь на Delphi XE2 автоматизировать анализ внутренних рабочих отчетов. В .zip-архиве находится файл details.txt, который надо извлечь и в дальнейшем работать. Но .zip-архив остается заблокированным в эксклюзивном режиме после окончания работы следующей функции:

Код:
uses
  ZipForge;


function ReadDetails(archivePath : WideString) : WideString;
var
  archiver : TZipForge;
  buffer : String;
begin
  Result := '';
  archiver := TZipForge.Create(nil);
  archiver.FileName := archivePath;

  try
    archiver.OpenArchive(fmOpenRead);
    archiver.ExtractToString('details.txt', buffer);
    result := UTF8ToUnicodeString(buffer);
  finally
    archiver.Free();
  end;
end;
Я пытался исправить ситуацию через TFileStream и флагами fmOpenRead or fmShareDenyNone, но тоже безрезультатно.

Последний раз редактировалось Stilet; 17.08.2013 в 17:32.
Jekerterim вне форума Ответить с цитированием
Старый 17.08.2013, 11:40   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

CloseArchive ??
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.08.2013, 13:49   #3
Jekerterim
Новичок
Джуниор
 
Регистрация: 17.08.2013
Сообщений: 3
По умолчанию

Да, пробовал, примерно так:

Код:
uses
  ZipForge;


function ReadDetails(archivePath : WideString) : WideString;
var
  archiver : TZipForge;
  buffer : String;
begin
  Result := '';
  archiver := TZipForge.Create(nil);
  archiver.FileName := archivePath;

  try
    // ++++
    archiver.OpenArchive(fmOpenRead or fmShareDenyNone);
    archiver.ExtractToString('details.txt', buffer);
    result := UTF8ToUnicodeString(buffer);
  finally
    // +++++
    archiver.CloseArchive;
    archiver.Free();
  end;
end;
но эффект тот же самый.

Последний раз редактировалось Stilet; 17.08.2013 в 17:33.
Jekerterim вне форума Ответить с цитированием
Старый 17.08.2013, 15:28   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Как Вы видите, что "остается заблокированным в эксклюзивном режиме" ?
После чего всё таки наступает разблокировка? После выхода из программы?
Пошагово проходили?
В документации по библиотеке/оф.сайте проблему искали?
Использование ZipForge обязательно?
Попробуйте вместо ZipForge воспользоваться любой другой библиотекой доступа к zip-архивам, в конце концов на ZipForge свет клином не сошёлся!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.08.2013, 18:45   #5
Jekerterim
Новичок
Джуниор
 
Регистрация: 17.08.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Как Вы видите, что "остается заблокированным в эксклюзивном режиме" ?
Потому что получаю такое сообщение об ошибке:

Цитата:
raises exception class EFOpenError with message 'Cannot open file "...". Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.'

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
После чего всё таки наступает разблокировка? После выхода из программы?
После выхода из программы.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Пошагово проходили?
Да.

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
В документации по библиотеке/оф.сайте проблему искали?
На Stackoverflow, но предложенный там вариант тоже не сработал.


Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Использование ZipForge обязательно? Попробуйте вместо ZipForge воспользоваться любой другой библиотекой доступа к zip-архивам, в конце концов на ZipForge свет клином не сошёлся!
Вы правы, на этой библиотеке свет клином не сошелся. Но проблема разрешилась сама собой: заменой fmOpenRead на fmOpenRead or fmShareDenyWrite
Jekerterim вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C# Блокировка формы на время создания папок и файлов jeysmook Общие вопросы .NET 5 26.04.2013 10:52
ZipForge brain22 Общие вопросы Delphi 1 28.04.2012 18:23
блокировка файлов при чтении и записи Arassir PHP 1 06.07.2011 00:00
ZipForge Добавление файлов в подкаталог phphel Общие вопросы Delphi 2 29.04.2011 18:07
Блокировка файлов UnD)eaD)Snake Общие вопросы Delphi 8 09.10.2007 18:39