![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Обработка файлов [D6, Win2k]
Vadim_Kyznetsov © (2002-05-27 22:22:00)Помогите, пожалуйста, новичку. У меня возникло 2 вопроса:
1) как получить список всех файлов в одной папке ?
Для вызова диалога выбора папок использую следующий код (обязательно подключать
ShellAPI и ShlObj):
код:
procedure TForm1.Button1Click(Sender: TObject);
var TitleName : string;
lpItemID : PItemIDList;
BrowseInfo : TBrowseInfo;
DisplayName : array[0..MAX_PATH] of char;
TempPath : array[0..MAX_PATH] of char;
begin
FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
BrowseInfo.hwndOwner := Form1.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
TitleName := "Выберите папку"; //предложение при открытии диалога
BrowseInfo.lpszTitle := PChar(TitleName);
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then begin
SHGetPathFromIDList(lpItemID, TempPath);
showmessage(temppath); //в переменной temppath
//содержится путь к выбранной папке
GlobalFreePtr(lpItemID);
end;
end;
2) как сделать так, чтобы ProgressBar при чтении файла в буфер и записи
файла из буфера показывал РЕАЛЬНЫЙ % загрузки, а не что-нибудь
другое ?
Заранее премного благодарен !!!
Vadim_Kyznetsov (2002-05-28 06:52:00) [1]
var
myfile: file of byte; // файл
filebuf:array [0..1048575] of byte; // файловый буфер
filelen:integer; // размер файла
implementation
{$R *.dfm}
procedure LoadFile (FileName:string);
var
q:byte;
i:integer;
begin
assignfile(myfile,FileName);
reset(myfile);
filelen:=filesize(myfile);
for i:=0 to filelen-1 do
begin
read(myfile,q);
filebuf[i]:=q;
end;
closefile(myfile);
end;
{Манипуляции с файлом}
{Напрмер, функция XOR}
{
procedure XORFunction();
var
i:integer;
b1,b2,p1:byte;
ind:string;
begin
p1:=170;
for i:=0 to filelen-1 do
begin
b1:=buf[i];
b2:=b1 xor p1;
buf[i]:=b2;
inc (p1);
if p1>255 then begin p1:=170; end;
{ProgressBar1.Position:=(1048575 div filelen);
end;
end;
}
procedure SaveFile(FileName:String);
var
i:integer;
q:byte;
begin
assignfile(myfile,FileName);
rewrite(myfile);
for i:=0 to filelen-1 do
begin
q:=filebuf[i];
write(myfile,q);
end;
closefile(myfile);
end;
rhf (2002-05-27 22:58:00) [2]выдай кусок кода где ты его считываешь
Vadim_Kyznetsov (2002-05-27 22:54:00) [3]Спасибо за совет, все работает !
А как же все-таки заставить ProgressBar показывать реальный % загрузки файла в буфер ? Пишу программку шифрования, так что очень хотелось бы видеть, как файл грузится в буфер.
rhf (2002-05-27 22:42:00) [4]вот так вот тоже можно заполнить listBox содержимым папки
ListBox1.Perform(LB_DIR, DDL_READWRITE or
DDL_HIDDEN or
DDL_SYSTEM or
DDL_READONLY,
Longint(pChar("c:\*.*")));
rhf (2002-05-27 22:36:00) [5]ну для начала код выбора можно упростить или вообще вместо shBrofseForFolder использовать selectDirectory, эффект почти такой же.... но не важно.
Получить список всех файлов можно так: (они пишуться в listbox1)
var sr:tSearchRec;
......
findFirst(s+"\*.*,faAnyFile,sr);
repeat
application.processMessages;
if (sr.name<>".")and
(sr.name<>"..")and
(sr.attr<>faDirectory then
listBox1.items.add(sr.name);
until findNext(sr)<>0;
findClose(sr);
но а вообщето есть в API и оно заполняет listbox именами файлов из дериктории......сейчас поищу