Текущий архив: 2009.05.10;
Скачать: CL | DM;
Вниз
Операционка ругается Найти похожие ветки
← →
D@nger (2009-03-26 14:50) [0]Открываю файл следующим образом:
var f:file of MyType;
str_table:MyType;
try
assignfile(f,path);
reset(f);
r:=filesize(f);
seek(f,0);
read(f,str_table);
except
closefile(f);
MessageDlg("Ошибка при открытии файла!", mtError, [mbOk], 0);
abort;
end;
далее в цикле заполняю данными из файла в динамический массив.
for i:=0 to r do
begin
seek(f,r);
read(f,str_table);
table[i].num:=str_table.num;
table[i].days:=str_table.days;
table[i].data:=str_table.data;
end;
closefile(f);
код немного сокращен но суть ясна... и во время выполнения операционка (не компилятор!!) выдает ошибку :
Windows не удалось найти "C:\Documents and Settings\yultashev\Рабочий стол\Без названия1.sud". Проверьте, что имя было введено правильно, и повторите попытку. Чтобы выполнить поиск файла, нажмите кнопку "Пуск", а затем выберите команду "Найти".
Хотя сама программа этот файл благополучно открывает и все данные на месте... такое чувство что программа на время открытия файла блокирует файл от операционки... почему так происходит не понимаю... как обойти эту ошибку? Ошибка возникает если открывать файл кликом по нему. Открывая файл Драг энд дроп ошибки не происходит.. хотя отрабатывает та же самая процедура открытия. Дебагером пошагово выполнял процедуру открытия файла.... окно эксплорера на это время не отвечает... и в это время видимо и происходит ошибка операционной системы...
вот такие пироги...
← →
Palladin © (2009-03-26 14:53) [1]есть такая старенькая песенка, про два кусочека колбаски...
> и во время выполнения операционка (не компилятор!!)
с каких фигов компилятор тебе будет выдавать что то во время выплнения... ты его в программу встроил чтоли...
← →
Сергей М. © (2009-03-26 14:56) [2]Как
> сама программа этот файл благополучно открывает
кореллирует с
> выдает ошибку
?
← →
D@nger (2009-03-26 14:59) [3]
> . ты его в программу встроил чтоли...
нет я запускаю программу через Delphi ... ну отладчик наверно за место компилятора... обшибся в формулировке...
← →
D@nger (2009-03-26 15:04) [4]
> Сергей М. © (26.03.09 14:56) [2]
>
> Как
>
> > сама программа этот файл благополучно открывает
>
> кореллирует с выдает ошибку
>
>
> ?
потому что выдает ошибку не программа а операционная система...
← →
MBo © (2009-03-26 15:06) [5]А нет ли желания прочитать весь файл разом в массив (если логика программы позволяет)?
← →
Сергей М. © (2009-03-26 15:11) [6]А файл то самый открывает, надо понимать, пргограмма без какого-либо участия ОС ?
Вот это новость)..
← →
Anatoly Podgoretsky © (2009-03-26 15:12) [7]> D@nger (26.03.2009 14:50:00) [0]
Это не ошибка открытия файла, а откуда то из другого места.
Возьми кусок for в блок try except
Как минимум не видать закрытия файла
← →
Сергей М. © (2009-03-26 15:14) [8]
> не видать закрытия файла
Закрытие-то как раз видать и без лупы
> closefile(f);
← →
Anatoly Podgoretsky © (2009-03-26 16:06) [9]> Сергей М. (26.03.2009 15:14:08) [8]
И точно последней строчкой
← →
Игорь Шевченко © (2009-03-26 16:09) [10]интересна корреляция между наличием в нике символов @ и степенью ясности вопроса.
← →
Anatoly Podgoretsky © (2009-03-26 16:45) [11]> Игорь Шевченко (26.03.2009 16:09:10) [10]
Косвенная
← →
D@nger (2009-03-27 06:42) [12]бл
> MBo © (26.03.09 15:06) [5]
>
> А нет ли желания прочитать весь файл разом в массив (если
> логика программы позволяет)?
а разве я не так делаю? открываю файл для чтения и в цикле считываю каждую запись файла в массив.
> Возьми кусок for в блок try except
В рабочем коде у меня все стоит как положено Try Except end; я просто привел основной код...
видать ошибка возникает не в процедуре открытия файла... а где то в обработке клика по файлу в проводнике, потому что открытие файла другим способом ошибки не возникает...привожу код обработки запуска программы кликом по файлу документа в проводнике... может тут ошибка закралась..
program CredCalc;
....
var hMainForm:hwnd;
paramstring:string;
copyDataStruct:TCopyDataStruct;
WParam:word;
LParam:LongInt;
begin
hMainForm:=FindWindow("TFMyprog",nil);
if (hMainForm=0)or(paramcount=0) then
begin
Application.Initialize;
Application.Title:="MyProg";
Application.CreateForm(TFMyProg, FMyprog);
if ParamCount<>0 then
TFMyprog(Application.MainForm).Opendoc(paramstr(1));
Application.Run;
end else
begin // если прога запущена то отрабатывается эта ветка
if paramcount<>0 then // если прога имеет параметры то отрабатывается эта ветка
begin
application.ProcessMessages;
ParamString:="";
ParamString:=ParamStr(1);
ShowWindow(hmainform, SW_showdefault);
CopyDataStruct.lpData:=PChar(paramstring);
CopyDataStruct.cbData:=Length(paramstring);
CopyDataStruct.dwData:=0;
WParam:=Application.Handle;
LParam:=Integer(@CopyDataStruct);
SendMessage(hMainForm, WM_CopyData, WParam,LParam);// отсылаем сообщение содержащее путь к файлу
end;
application.terminate;
end;
end.
Далее обрабатываю сообщение такой процедуркой
procedure TFMyprog.CopyData(var Msg: TWMCopyData);
var s:string;
CopyDataStructure:TCopyDataStruct;
i:integer;
len:integer;
begin
inherited;
CopyDataStructure:=Msg.CopyDataStruct^;
S:="";
len:=CopyDataStructure.cbData-1;
for i:=0 to len do
S:=S+(PChar(CopyDataStructure.lpData)+i)^;
opendoc(S);
end;
вроде все правильно... и файл то открывается ... но винда кратковременно теряет этот файл из виду и выдается ошибка... пробовал на других машинах запускать программу.. то же самое...
← →
MBo © (2009-03-27 06:59) [13]>а разве я не так делаю? открываю файл для чтения и в цикле считываю каждую запись файла в массив
Нет. Одной операцией можно. C TFileStream, наверно, проще всего.
← →
D@nger (2009-03-27 07:04) [14]
> Нет. Одной операцией можно. C TFileStream, наверно, проще
> всего.
>
покажи как пожалуста!
← →
MBo © (2009-03-27 07:35) [15]
fs := TFilseStream.Create(FileName, fmOpenRead);
try
SetLength(table, fs.Size div SizeOf(MyType));
fs.Read(table[0], fs.Size);
finally
fs.Free;
← →
D@nger (2009-03-27 07:39) [16]
> MBo © (27.03.09 07:35) [15]
>
>
спасибо попробую...
← →
D@nger (2009-03-27 08:31) [17]я понял в чем ошибка была... ошибка была в неправильной ассоциации файлов с программой...
← →
brother © (2009-03-27 12:05) [18]а про ассоциации ты ничего не говорил!
← →
D@nger (2009-03-27 14:12) [19]
> а про ассоциации ты ничего не говорил!
потому что я и сам не знал что причина может быть в этом...
спасибо всем за помощь... теперь возникла проблема с отображением иконки с ассоциированнго файла... для этого вопроса создам новую тему..
← →
clickmaker © (2009-03-27 14:17) [20]> для этого вопроса создам новую тему
может, не надо?
ExtractAssociatedIcon() не поможет?
Страницы: 1 вся ветка
Текущий архив: 2009.05.10;
Скачать: CL | DM;
Память: 0.52 MB
Время: 0.007 c