Форум: "Начинающим";
Текущий архив: 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