Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2012.01.15;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.008 c
1-1280310464
George
2010-07-28 13:47
2012.01.15
Обращение к сетевой папке из службы


15-1317056504
Dennis I. Komarov
2011-09-26 21:01
2012.01.15
Бегство с тонущего корабля


2-1317643451
Очень Злой
2011-10-03 16:04
2012.01.15
TFileStream


2-1317972414
ЕД
2011-10-07 11:26
2012.01.15
TcxDBLookUpComboBox в TcxDBVerticalGrid


9-1175164239
crytogen
2007-03-29 14:30
2012.01.15
нарисовать трубу в OpenGL по точкам