![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не открывается файл Reset'ом
Muller © (2005-08-05 23:31:00)
var
FName : string;
DName : array of string;
procedure FileWork(const FileName: string);
var
F: file;
begin
Assign(F,FileName);
Reset(F,1); // чтение по одному байту
// .......................
Close(F); // или CloseFile(F) - все равно
end;
обращаюсь
FileWork(FName) - работает
FileWork(DName[k]) - косячит
трассировка показывает, что в случае с DName[k]
процедура IOResult <> 0, т.е. какой-то косяк с файлом:
{$I-}
Reset(Fi,1);
{$I+}
if IOResult <> 0 ... - срабатывает!
пробовал
S := DName[k]; // S - string (глоб var);
FileWork(S);
бесполезно
Где ошибка?
Muller (2005-08-07 23:43:00) [1]да, всё ОК, работает
спасибо
Muller (2005-08-07 21:18:00) [2]вот это не знал
щас пробую
begin...end (2005-08-07 12:08:00) [3]> Muller (07.08.05 0:22) [10]
> IOResult возвращает 32
ShowMessage(SysErrorMessage(32)): Процесс не может получить доступ к файлу, так как этот файл занят другим процессом.
begin...end (2005-08-07 11:44:00) [4]> Muller (07.08.05 11:15) [12]
Перед Resetдобавить FileMode := fmOpenReadне помогает?
Muller (2005-08-07 11:15:00) [5]Дело не в массиве
приводить весь код - много, долго выковыривать
вообще-то приведенный фрагмент процедуры Filework - это расчёт CRC32 передаваемого файла. После замены процедуры на другую с использованием TFileStream (+ модуль Classes) всё работает отлично, поэтому считаю, что ошибка именно в связке Assign - Reset (только непонятно почему)
Проверка на существование файла (FileExists) перед Aassign проходит успешно.
Если пробовать OpenDialog, то OpenDialog.FileName и параметр функции FileName совпадают, но файл не открывается.
Джо (2005-08-07 00:42:00) [6]Приведи, все-таки, заполнение массива DName и все, с ним связанное. Реальный код.
Muller (2005-08-07 00:22:00) [7]IOResult возвращает 32 :0
ничё не понимаю - целый или вещественный тип
чего? не понимаю :(
Muller (2005-08-06 12:42:00) [8]еще раз [3]
т.е. при трассировке Filename не пустая строка, а самая что ни на есть живая, но Reset её не берёт
> Palladin © (06.08.05 10:10) [5]
> вместо Assign - AssignFile, вместо Close - CloseFile
пробовал - проблема осталась
Mx (2005-08-06 11:54:00) [9]
> Anatoly Podgoretsky © (06.08.05 11:21) [7]
Сейчас как раз файлами занимался (правда через FileOpen/FileClose), и прочитал заодно что Assign/Close для совместимости сохранено. Облажался...
Anatoly Podgoretsky (2005-08-06 11:21:00) [10]Ты думаешь точно?
Mx (2005-08-06 10:14:00) [11]
> Palladin © (06.08.05 10:10) [5]
> вместо Assign - AssignFile, вместо Close - CloseFile
Хе, а ведь точно :) А никто и не заметил :)
Palladin (2005-08-06 10:10:00) [12]вместо Assign - AssignFile, вместо Close - CloseFile
Джо (2005-08-06 00:05:00) [13]Приведи весь код, как есть, включая заполнение массива.
Muller (2005-08-06 00:00:00) [14]какой Record? Нет никакого Record'a!
FileName во всех перечисленных случаях равен тому чему надо
хинт:
Filename = 'c:\programming\ultraprog\test\rt.dll';
но с Stringработает, а с ^array of stringне хочет
Джо (2005-08-05 23:37:00) [15][1] Джо © (05.08.05 23:36)
> Причем тут Record?
Т.е., причем тут Reset?
Джо (2005-08-05 23:36:00) [16]Неверное имя файла передаешь в процедуру. Причем тут Record? Поставь в начале процедуру брэкпойнт и посмотри, чему равен FileName внутри процедуры.