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

Вниз

findfirst не ищет в temp пользователя win7   Найти похожие ветки 

 
ford ©   (2011-10-06 13:20) [0]

есть две процедуры: одна копирует файлы, другая ищет файлы в директории.

Procedure ScanDir(InitPath,Mask:String; FileAttr:Integer; FileList:TStrings; AllTree:Boolean=True; IncludeDirectory:Boolean=False); //поиск файлов
Var sr:TSearchRec;
Begin
if InitPath[Length(InitPath)]<>"\" Then InitPath:=InitPath+"\";
FindFirst(InitPath+Mask,FileAttr,sr);
repeat
 if (sr.Name<>"..") and (sr.Name<>".") and (sr.Name<>"") Then
   Begin
    if (sr.Attr and FileAttr)=sr.Attr Then
     Begin
      If (sr.Attr and faDirectory)<>faDirectory Then FileList.Append(InitPath+sr.Name)
      Else if IncludeDirectory Then FileList.Append(InitPath+sr.Name+"\");
     end;
   End;
until FindNext(sr)<>0;
findClose(sr);
if Alltree Then
 Begin
  FindFirst(InitPath+"*.*",faDirectory,sr);
  repeat
   if (sr.Name<>"..") and (sr.Name<>".") and (sr.Name<>"") Then ScanDir(InitPath+"\"+sr.Name,Mask,FileAttr,FileList,Alltree);
  until FindNext(sr)<>0;
  FindClose(sr);
 end;
End;

function cpf(src,dst:String):Boolean; //копирование файлов
var f1,f2:TFileStream;
   fm,i:Integer;
   lst:TStringList;
Begin
 result:=False;
 if src<>"" Then
  Begin
...
    try
     fm:=FileMode;
     FileMode:=0;
     f1:=TFileStream.Create(src,fmOpenRead or fmShareDenyNone);
     FileMode:=fm;
     f2:=TFileStream.Create(dst,fmCreate);
     f2.CopyFrom(f1,f1.Size);
     f1.Free;
     f2.Free;
     //убеждаемся что файл скопирован
     lst:=TstringList.Create;
     repeat
      lst.Clear;
      ScanDir(ExtractFileDir(dst),extractFileName(dst),lst);
     until lst.Count>=1;
     lst.Free;
     result:=true;
    except
     result:=false;
     f2.Free;
     f1.Free;
    End;
   end;
 end;
End;


в программе
 
  var TmpDir,SrcDir:String;
  ...

  //ищем в директории все файлы с раcширением txt
  //и копируем их во временную папку текущего пользователя

  ScanDir(SrcDir,"*.txt",fList);
  if fList.Count>0 Then
   Begin
    for i:=0 to fList.Count-1 do
     begin
      try
        cpf(fList[i],TmpDir+ExtractFileName(fList[i]));
      except
      end;
     end;
   End;

fList.Clear;
//создаем список файлов которые скопированы во временную папку
//в предыдущем коде
ScanDir(TmpDir,"*.txt",fList);
if fList.Count>0 Then
 Begin
...


т.е. сканируется определенная папка, из которой все текстовики копируются во временную директорию текущего пользователя, а именно в папку c:\Users\User\AppData\Local\Temp
при копировании каждого файла вызываю процедуру сканирования с параметрами конкретного скопированного файла, чтобы убедиться что он там существует.
далее программа сканирует файлы во временной папке и выполняет с ними определенные действия.
Под WinXP все работает на ура!
но под Windows7 процедура которая ищет файлы во временной папке выдает пустой список :(
хотя она же отрабатывает нормально при копировании файла, когда вызывается для того чтобы убедиться что файл скопирован.
т.е. findfirst, findnext при указании им параметром конкретно

c:\Users\User\AppData\Local\Temp\file.txt
работает
а вот при указании
c:\Users\User\AppData\Local\Temp\*.txt
нет
и причем только под windows 7 :(

Может кто сталкивался с подобным? Или я в код что-то не так сделал?


 
Омлет ©   (2011-10-06 13:44) [1]

>     if (sr.Attr and FileAttr)=sr.Attr Then

Это зачем?

К тому же, заголовок функции

> Procedure ScanDir(InitPath,Mask:String; FileAttr:Integer; FileList:TStrings; AllTree:Boolean=True; IncludeDirectory:Boolean=False);

как-то не сходится с вызовом:

> ScanDir(ExtractFileDir(dst),extractFileName(dst),lst);
> ScanDir(TmpDir,"*.txt",fList);


 
Омлет ©   (2011-10-06 13:49) [2]

И еще, FindFirst - это функция. Может вернуть не 0..


 
ford ©   (2011-10-06 13:55) [3]


> как-то не сходится с вызовом:

я не стал приводить overload этой функции


Procedure ScanDir(InitPath,Mask:String; FileList:TStrings; AllTRee:Boolean=True; IncludeDirectory:Boolean=false); overload;
Begin
ScanDir(InitPath,Mask,faAnyFile,FileList,Alltree,IncludeDirectory);
End;


но сути это не меняет :(


 
Ega23 ©   (2011-10-06 14:03) [4]

http://lurkmore.ru/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD:Brain
Это ко всем функциям из [0]


 
ford ©   (2011-10-06 14:03) [5]


> Омлет ©   (06.10.11 13:44) [1]
>
> >     if (sr.Attr and FileAttr)=sr.Attr Then
>
> Это зачем?


АААА спасибо друг !!!


 
ford ©   (2011-10-06 14:10) [6]


> Ega23 ©   (06.10.11 14:03) [4]

никакого взрыва, а всего-лишь более удобная для меня лично библиотека функций, которые являются обертками для стандартных и упрощают их применение.


 
Ega23 ©   (2011-10-06 14:20) [7]


>  а всего-лишь более удобная для меня лично библиотека функций


1. Она корява. Но это полбеды.
2. Она написана с потенциальными граблями. А вот это уже плохо.



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

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

Наверх





Память: 0.47 MB
Время: 0.003 c
15-1316457374
Leon-Z
2011-09-19 22:36
2012.01.15
Каким будет ПО через 10 лет ?


2-1317823891
SergP
2011-10-05 18:11
2012.01.15
Рекурсивное описание классов.


2-1317185371
vgvolk
2011-09-28 08:49
2012.01.15
Создание xml файла в делфи


1-1279540450
crossmark
2010-07-19 15:54
2012.01.15
Delphi and Interface


15-1317550613
Loginov Dmitry
2011-10-02 14:16
2012.01.15
Indy - работа с электронной почтой





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский