Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Ошибка при попытки поска яайла


Автор: Berliner 5.8.2005, 22:18
вот вроде должно работать но в сторке d2:=FileDateToDateTime(a); вываливает ошибку а принимает значение -1 а(типа файл не найден) хотя такой файл есть! Подскажите почему пожалуста

Код

FindFirst('c:\c??.arx',faAnyFile,poisk);
filetp:=poisk.Name;
//filetp:='c:\\с12.arx'; 
a:=FileAge(filetp);
d2:=FileDateToDateTime(a);  // ВОТ ТУТ А=-1 ХОТЯ НА С;\C12.ARX -ЛЕЖИТ
s:=DateTimeToStr(d2); 
s:=Copy(s,1,10);    
d3:=DateTimeToStr(DateTimePicker1.DateTime); 
d3:=Copy(d3,1,10); 
if d3=s then ShowMessage('ok')

  else ShowMessage(Nothing);


М
 
Пользуйся тегами CODE!

Автор: Pakshin A. S. 5.8.2005, 22:26
c:\c??.arx

Шо це таке?

А пошагово выполнить и просмотреть еще раз все значения всех переменных?

Автор: Pakshin A. S. 5.8.2005, 22:42
хмм... станнова-то...

Автор: Berliner 5.8.2005, 23:09
пробывал пошагово

a:=FileAge(filetp); - вот тут значение filetp =c12.arx

а потом строчкой ниже d2:=FileDateToDateTime(a); а=-1 типа фал не найден???????????????/

файл на диске с есть smile smile smile

Автор: Pakshin A. S. 5.8.2005, 23:12
Код

FindFirst('c:\c??.arx',faAnyFile,poisk);
filetp:=poisk.Name;
s:='c:\c12.arx';
if filetp <> s then ShowMessage('') ;

Сообщение вылетает всегда...

В чем же различие этих строк?!
Добавлено @ 23:15
Достаточно в малом... в том, что нету полного пути к файлу...
Добавлено @ 23:17
Код

var
 poisk: TSearchRec;
 filetp: string;
begin
FindFirst('c:\c??.arx',faAnyFile,poisk);
filetp:='c:\' + poisk.Name;
FindClose(poisk);
ShowMEssage(DateTimeToStr(FileDateToDateTime(FileAge(filetp))));

Автор: Bes 8.8.2005, 07:11
Ну если я правильно понял то не ошибка, а просто программа не находит файл. Ну я думаю надо поварьировать второй параметр FindFirst-a потому что faAnyFile это не совсем любой файл.... вроде бы у меня была подобная проблема

Автор: Pakshin A. S. 8.8.2005, 08:20
Очки подарить? (Тока без обид) smile

Цитата(Pakshin @ 6.8.2005, 00:12)

В чем же различие этих строк?!
Добавлено @ 00:15
Достаточно в малом... в том, что нету полного пути к файлу...


В poisk.Name всегда хранится имя найденного файла без пути к нему!!! А функция FileAge() требует полный путь к файлу!!!

Поэтому если даже прописать все типы файлов с faAnyFile, но оставить все, как было ранее, то функция все-равно не будет работать, т. к. нету полного пути к файлу.

Автор: Berliner 8.8.2005, 14:07
Спасибо за подсказку с путем разобрался но появилась другая проблема надо чтобы все файлы *.avi переберал
и проверял на время cовпадения с ДэйтамПикером а у меня один только файл хватает а потм циклит(while<>s do..... неадо чтобы взял avi проверил дата с пикером совпала значитshow message ok а если не совпала то перебераем все авишки пока совпадет Я думаю я не правильно использовал FindNEx или цикл
Подскажите пожалуста очень нужно
Код


 begin
        FindFirst('c:\*.avi',faAnyFile,poisk);
        filetp:= 'c:\'+poisk.Name;
        a:=FileAge(filetP);
        d2:=FileDateToDateTime(a);
        s:=DateTimeToStr(d2); 
        s:=Copy(s,1,10);    
        d3:=DateTimeToStr(DateTimePicker1.DateTime); 
        d3:=Copy(d3,1,10); 
        end;
        while d3<>s do
               begin
               FindNext(poisk);
              a:=FileAge(filetP);
              d2:=FileDateToDateTime(a); 
              s:=DateTimeToStr(d2); 
              s:=Copy(s,1,10);     
             d3:=DateTimeToStr(DateTimePicker1.DateTime); 
             d3:=Copy(d3,1,10); 

         end;




Автор: Pakshin A. S. 8.8.2005, 21:28
Вот пища для размышления:
Код

var
 poisk: TSearchResult;
 res: integer;
begin
 res:=FindFirst('somefile', faAnyFile, poisk);
 while res = 0 do
  begin
   <...>
   res:=FindNext(poisk);
  end;
 FindClose(poisk);
end;

Намек понятен? smile Правильно догадался: все, что связано с происком файла - функции с возвратом определенных значенией. Итого вверху имеем пример обхода все й дирректории с поиском нужного файла. Мы прекращаем поиск в том случае, если файла нету.

Отсюда мораль: Нужно добавить одну переменную и добавить лишнее условие в цикл, которое выводило прогрумму из цикла в тот момент, когда больше файлов не было обнаружено. smile

Надеюсь понятно? smile
Добавлено @ 21:36
Хех... добрый я что-то стал:
Код

begin
 d3:='a'; s:='b';
 res:=FindFirst('c:\*.avi', faAnyFile, poisk);
 while (d3 <> s) and (res = 0) do
   begin
     filetp:= 'c:\' + poisk.Name;      
     a:=FileAge(filetP);
     d2:=FileDateToDateTime(a); 
     s:=DateTimeToStr(d2); 
     s:=Copy(s,1,10);     
     d3:=DateTimeToStr(DateTimePicker1.DateTime); 
     d3:=Copy(d3,1,10); 
     res:=FindNext(poisk)
   end;
 FindClose(poisk);
 if d3 = s
  then
   ShowMessage(':D')
  else
   ShowMEssage(':((')
end;

Надеюсь, правильно... smile

Автор: Berliner 9.8.2005, 17:52
Спасиб уже разобрался
Код

If CheckBox1.Checked=true then

        begin
        if
        FindFirst('c:\*.avi',faAnyFile,poisk)=0 then
          begin
           repeat
                filetp:= 'c:\'+poisk.Name;
                a:=FileAge(filetP);
                 if a=-1 then
                 begin
                 ShowMessage('ll');
                 exit;
                 end;
                d2:=FileDateToDateTime(a);
                s:=DateTimeToStr(d2); 
                s:=Copy(s,1,10);     
                d3:=DateTimeToStr(DateTimePicker1.DateTime); 
                d3:=Copy(d3,1,10); 
        if d3=s then
        begin
///
///

         ShowMessage(filetP);

        break;

        end;
           until FindNext(poisk) <> 0;
           FindClose(poisk);

        end;

        end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)