Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Вниз

Открытие файла, не закрытого другой программой   Найти похожие ветки 

 
asdqwer   (2006-11-25 16:08) [0]

При попытке открыть файл (с помощью процедуры reset), не закрытый другим приложением, написанным на Pascal (с помощью процедуры close или closefile) возникает сообщение об ошибке "Невозможно открыть файл ... ". Такое же сообщение возникает, даже если использовать блок try - except. Возможно ли как-то определить, корректно ли закрыт тот или иной файл или, по крайней мере, при возникновении ошибки иметь возможность её обработать, избежав появления сообщения?


 
Savek   (2006-11-25 16:11) [1]

Для этого и есть блок try - except, а сообщение возникает потому что запускаешь прогу из под Делфи.


 
asdqwer   (2006-11-25 16:15) [2]

В том-то и дело, что нет! Ошибка возникла на компьютере, где Delphi вообще не установлена. А причину я выяснил уже с помощью отладки.


 
Savek   (2006-11-25 16:22) [3]

Покажи код, без него трудно сказать что-то умное...


 
koha ©   (2006-11-25 23:06) [4]

Через какой интервал времени после закрытия/незакрытия прога пытается открыть файл?


 
Германн ©   (2006-11-26 02:13) [5]


> Такое же сообщение возникает, даже если использовать блок
> try - except.

Имхо, не там или не так ставишь "защищённый блок".
Выполни [3}


 
Krants   (2006-11-27 14:10) [6]

asdqwer [0]
обычно при проверке "занятости" файла используют, как сказал Savek, блок
try - except

try
{открываем файл}
except
{файл не открыт}
Result:=false;
end;


 
alex810 ©   (2006-11-27 14:27) [7]

Попробуйте это нашел у себя в справочнике
Даже если файл открыт с низкими привелегиями (используя ReadOnly, ShareReadWrite) , иногда открытие уже открытого файла может приводить к ошибкам, особенно, если это файл интенсивно используется другим приложением. Самый простой способ решить эту проблемму - это использовать MemoryStream вместо непосредственного доступа к файлу:

var
 Memory: TMemoryStream;
begin
 Memory := TMemoryStream.Create;
 try
   Memory.LoadFromFile("DelphiWorld.dat"); // это он!!
   ...
   Memory.read(...); // Вы можете использовать методы чтения как у файлов
   Memory.Seek(...);
   FileSize := Memory.Size;
   ...
 finally
   Memory.Free;
 end;
end;

Данный способ никогда не открывает файл, а заместо этого создаёт копию его в памяти. Конечно Вы можете и записать в поток (Stream) в Памяти(Memory), но изменения не будут записаны на диск до тех пор, пока Вы не запишете их в файл (командой SaveToFile).


 
Дмитрий Белькевич ©   (2006-11-27 23:38) [8]

А файл на запись вообще открывать нужно? Может чтения достаточно?
Тогда переменная FileMode поможет.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.056 c
2-1164883545
.ruslan
2006-11-30 13:45
2006.12.17
Обращение к динамическим компонентам


8-1146731973
medved_68
2006-05-04 12:39
2006.12.17
Картинка с панели


15-1164366912
dreamse
2006-11-24 14:15
2006.12.17
Подскажите компонент


15-1164614272
boriskb
2006-11-27 10:57
2006.12.17
История


2-1164651925
Змей
2006-11-27 21:25
2006.12.17
webbrowser. анимация вкл.выкл





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский