| 
| 
 | Вопрос # 1 348/ вопрос открыт / | 
 |  Приветствую, уважаемые эксперты!может быть будет несколько путанно с объяснением проблемы, но...
 с помощью делфи выбрасываю инфу в excel  - файл на диске с имя.xls - потом его окрываю для пользователя. имя - краткое название отчета+дата.отчетов около сотни. пользователь может формировать этот самый отчет (или др.) целый день - каждый раз новый файл. поэтому при формировании я удаляю файлы. если какой либо файл открыт - будет ошибка удаления - выдать месаг о событии я могу и все.
 Вопрос - как определить что файл открыт, пропустить его?
 
|  |   Вопрос задала: SadKitty (статус: Посетитель)Вопрос отправлен: 18 февраля 2008, 09:23
 Состояние вопроса: открыт, ответов: 2.
 |  Ответ #1. Отвечает эксперт: min@y™ Используй для удаления API-функцию 
 BOOL DeleteFile(
 LPCTSTR lpFileName 	// pointer to name of file to delete
 );
 
 и анализируй её результат. Если false - удалить не удалось. А причину, почему не удалось (файл не найден/открыт другим приложением/нет прав доступа) можно узнать через GetLastError().
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 18 февраля 2008, 09:51
 Оценка за ответ: 1
 Комментарий к оценке: написано - удаляю файлы и могу выдать сообщение об ошибке(причину)необходимо узнать открыт ли файл до удаления
 |  Ответ #2. Отвечает эксперт: Вадим К Здравствуйте, SadKitty!Что бы узнать, надо попробывать самому открыть файл, причём попробывать в монопольном доступе. если получиться - файл не занят. То что мы не знам структуры файла нас волновать не должно.
 
 procedure TForm2.Button1Click(Sender: TObject);
  var fs:TFileStream;
begin
  if not OpenDialog1.Execute then Exit;
    try
    fs:=TFileStream.Create(OpenDialog1.FileName, fmOpenReadWrite + fmShareExclusive); //запрашиваем по максимуму -
чтение и запись в эксклюзивном режиме. Тоесть "только я".
    fs.Free;
    except
      ShowMessage('Файл занят');
    end;
end;попробуйте этот код, работает справно. И не только для экселя, а и для многих других програм, которые держат файл открытым.
|  | Ответ отправил: Вадим К (статус: Академик)Время отправки: 19 февраля 2008, 00:53
 Оценка за ответ: 5
 Комментарий к оценке: большое спасибо за помощь |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 18 февраля 2008, 14:31; участников в обсуждении: 1. 
|   | SadKitty (статус: Посетитель), 18 февраля 2008, 14:31 [#1]:я использую эту функцию для удаления. мне необходимо заранее определить открыт ли файл (и какой именно) а потом только удалять
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |