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

Вниз

Обработка файлов   Найти похожие ветки 

 
Vadim_Kyznetsov   (2002-05-27 22:22) [0]

Помогите, пожалуйста, новичку. У меня возникло 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 при чтении файла в буфер и записи
файла из буфера показывал РЕАЛЬНЫЙ % загрузки, а не что-нибудь
другое ?

Заранее премного благодарен !!!


 
rhf ©   (2002-05-27 22:36) [1]

ну для начала код выбора можно упростить или вообще вместо 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 именами файлов из дериктории......сейчас поищу


 
rhf ©   (2002-05-27 22:42) [2]

вот так вот тоже можно заполнить listBox содержимым папки

ListBox1.Perform(LB_DIR, DDL_READWRITE or
DDL_HIDDEN or
DDL_SYSTEM or
DDL_READONLY,
Longint(pChar("c:\*.*")));


 
Vadim_Kyznetsov   (2002-05-27 22:54) [3]

Спасибо за совет, все работает !
А как же все-таки заставить ProgressBar показывать реальный % загрузки файла в буфер ? Пишу программку шифрования, так что очень хотелось бы видеть, как файл грузится в буфер.


 
rhf ©   (2002-05-27 22:58) [4]

выдай кусок кода где ты его считываешь


 
Vadim_Kyznetsov   (2002-05-28 06:52) [5]


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;



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

Текущий архив: 2002.06.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.01 c
3-17806
ZDN
2002-05-16 09:17
2002.06.06
Делаю простенький отчет с помощью QReport 3.


1-17889
Демон
2002-05-26 14:40
2002.06.06
Как в СтрингГрид вставить картинку???


3-17835
uncle_m16
2002-05-16 20:23
2002.06.06
Раздуплите как в базе создать генератор


1-18029
Валет
2002-05-24 17:09
2002.06.06
Задача =)


1-18025
S@shka
2002-05-24 13:51
2002.06.06
Передача данных из одной формы в другую...