Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
15-1236547810
Юрий
2009-03-09 00:30
2009.05.10
С днем рождения ! 9 марта 2009 понедельник


9-1179259096
DevilDevil
2007-05-15 23:58
2009.05.10
Повернуть спрайт вокруг произвольной точки


15-1235986259
Nameziz
2009-03-02 12:30
2009.05.10
связь Программирования и Математики


15-1235938698
TInt
2009-03-01 23:18
2009.05.10
Можно ли сделать чтоб класс менял размер массива не зная его типа


2-1238489662
Лёша
2009-03-31 12:54
2009.05.10
SQL. Как вывести список дат по диапазону?