Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как узнать используется ли файл приложениями 
:(
    Опции темы
pavelv
Дата 16.2.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Я работаю с Экселем. В нем открываю файл и если повторно нажать на форме открытие файл проект вылетает и пишет ошибку "Нет доступа к blank.xls". Как можно узнать открыт ли файл на данный момент?
PM MAIL   Вверх
_hunter
Дата 16.2.2006, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



попробовать открыть его без эксклюзивно -- если получилось -- никто его не держит


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
pavelv
Дата 17.2.2006, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Что значит открыть "без эксклюзивно"? Я так понимаю ошибка возникает при попытке обратиться к файлу, тогда любые попытки открыть его приведут к той же ошибке.
PM MAIL   Вверх
Snowy
Дата 17.2.2006, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Для этого и существуют конструкции try except.
Хотя можно и без них - функция CreateFile.
Код
var
  h: Thandle;
begin
  h := CreateFile(PChar(sfile), GENERIC_READ, 0, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_ARCHIVE, 0);
  if h = INVALID_HANDLE_VALUE then занято!
  else CloseHandle(h);

PM MAIL   Вверх
pavelv
Дата 17.2.2006, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Код

function E9FileStatus(const Origin: string): boolean;
var
  F: TFileStream;
begin
  try
    F := TFileStream.Create(Origin, fmOpenReadWrite or fmShareExclusive);
    try
      Result := true;
    finally
      F.Free;
    end;
  except
    Result := false;
  end;
end;

я делал так, сейчас проверю твой вариант, но помойму это тот же вариант. Вылетает с ошибкой за Create "Cannot open b.xls. Процесс не может получить доступ к файлу так как файл занят другим приложением."
PM MAIL   Вверх
Snowy
Дата 17.2.2006, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Это он из-под отладчика так ругается - без отладчика будет все корректно.
А мой вариант и под отладчиком должен корректно работать.
Добавлено @ 12:05
Вот такой вариант работает точно, тихо, корректно:
Код

function CanAccessFile(FileName: string): boolean;
var
  h: Thandle;
begin
  result := true;
  SetLastError(0);
  h := CreateFile(PChar(FileName), GENERIC_READ, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, 0);
  if GetLastError <> 0 then result := false
  else CloseHandle(h);
end;
Но только, если файл существует.
Если файл не существует, то также ответ будет false.
PM MAIL   Вверх
pavelv
Дата 20.2.2006, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 5.2.2006

Репутация: нет
Всего: нет



Если файл не создан понятно. Snowy спасибо, этот вариант действительно корректно работает под отладчиком.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0832 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.