![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте! как вывести размер файла
Код:
procedure TForm1.FileSearch(const dirName:string);
var
searchResult: TSearchRec; a : array [1..255] of Integer;
begin
if FindFirst(dirName+'\*', faAnyFile, searchResult)=0 then begin
try
repeat
if (searchResult.Attr and faDirectory)=0 then begin
if SameText(ExtractFileExt(searchResult.Name), '.jpg') then begin
ListBox2.Items.Append(IncludeTrailingBackSlash(dirName)+searchResult.Name);
memo3.Lines.Add(inttostr(searchResult.Size)); //size image
// a[i]:=searchResult.Size;
// memo5.Lines.Add(inttostr(a[i]));
end;
end else if (searchResult.Name<>'.') and (searchResult.Name<>'..') then begin
FileSearch(IncludeTrailingBackSlash(dirName)+searchResult.Name);
end;
until FindNext(searchResult)<>0
finally
FindClose(searchResult);
end;
end;
end;Код:
procedure TForm1.Button6Click(Sender: TObject);
begin
FileSearch('d:\image');
memo5.Lines.Add(a);
end; |
|
#2
|
|||
|
|||
|
вернее как его вывести я знаю:
Код:
memo5.Lines.Add(inttostr(a[i])); Код:
procedure TForm1.Button6Click(Sender: TObject);
begin
FileSearch('d:\image');
memo5.Lines.Add(a);
end; |
|
#3
|
|||
|
|||
|
Ну сделай call-back в функции поиска, например.
Или я просто не понимаю что ты хочешь. Вывод информации о файле при клике на его имя в ListBox? Ну так для этого эту информацию надо где-то сохранять. Тут есть разные варианты. Надо понимать что надо сделать, как это должно работать с точки зрения пользователя, а уж как это сделать - вопрос чисто технический, тем более, что задача типовая... |
|
#4
|
|||
|
|||
|
я тоже подумал записать в простой listbox и считывать от туда
Код:
ListBox2.Items.Append(IncludeTrailingBackSlash(dirName)+searchResult.Name); Код:
procedure TForm1.FileSearch(const dirName:string);
var
searchResult: TSearchRec;
begin
Result:=searchResult.Size;
end;
Код:
procedure TForm1.Button6Click(Sender: TObject);
var i:integer;
begin
FileSearch('d:\image');
memo5.Lines.Add(Result);
end;Код:
SqlQuery1.ParamByName('size').AsString := '4456874mb'; //inttostr(imgsize); |
|
#5
|
|||
|
|||
|
Еще раз.
Какой функционал ты пытаешься сделать? Поиск файлов и вставка их в БД? Т.е. пользовательского интерфейса нет. Соответсвенно, вполне можно сделать CallBack в процедуре поиска которая и будет всталять записи в БД. Да, можно заполнить массив/список и уже из него вставлять. А зачем промежуточный код? Например, возьмем твой код и немного его переделаем: Код:
type
TInsertImageToDbCallBack = procedure(AFileName : String; ASize : Integer) of object;
procedure TForm1.FileSearch(const dirName:string; ACallBack : TInsertImageToDbCallBack);
var
searchResult: TSearchRec; a : array [1..255] of Integer;
begin
if FindFirst(dirName+'\*', faAnyFile, searchResult)=0 then begin
try
repeat
if (searchResult.Attr and faDirectory)=0 then begin
if SameText(ExtractFileExt(searchResult.Name), '.jpg') then begin
ACallBack(IncludeTrailingBackSlash(dirName)+searchResult.Name,searchResult.Size); end;
end else if (searchResult.Name<>'.') and (searchResult.Name<>'..') then begin
FileSearch(IncludeTrailingBackSlash(dirName)+searchResult.Name);
end;
until FindNext(searchResult)<>0
finally
FindClose(searchResult);
end;
end;
end;Теперь вызов. Делаем раз (делаем 2 callback'а, один для отладки, второй для вставки данных): Код:
procedure TForm1.AddToMemoCb(AFileName : String; ASize : Integer);
begin
Memo1.Lines.Add(Format('File: %s; Size: %d',[AFileName,ASize]));
end;
procedure TForm1.AddToDbCb(AFileName : String; ASize : Integer);
begin
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(Format('INSERT INTO tablename (name, size) VALUES (%s, %d)',[AFileName,ASize]));
SQLQuery1.Exec;
end;Ну и, собственно, вызов: Код:
FileSearch('c:\images\',AddToMemoCb); // Показали в Memo
FileSearch('c:\images\',AddToDbCb); // Записали в БДА вообще, это еще и в отдельный поток можно "вытолкнуть", что бы основной процесс (интерфейс) не подвисал. |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
leon2009 (20.09.2023)
| ||
|
#6
|
|||
|
|||
|
про id забыли
Код:
FileSearch(IncludeTrailingBackSlash(dirName)+searchResult.Name,AddToMemoCb); Код:
procedure TForm1.AddToMemoCb(AFileName : String; ASize : Integer);
begin
inc(id);
Memo5.Lines.Add(Format('id: %id, File: %s; Size: %d',[AFileName,ASize]));
end; |
|
#7
|
|||
|
|||
|
Ну, во первых, сам добавишь что там тебе надо.
Во вторых, главное что бы принцип понял, а конкретные поля принципиально ничего не меняют. В третьих, как я понимаю, id - это уникальный идентификатор в БД. Проблема в том, что значение этого поля обычно не доступно до тех пор. пока запись не будет добавлена в таблицу. Более того, обычно новый id либо запрашивается из БД, либо вообще добавляется триггером автоматически (его в этом случае даже не указывают в запросе вставки записи). В подобном коде, когда идет вставка большого кол-ва записей, назначение id оставляется на БД. Потом, если надо, эти записи после вставки вычитываются из БД обратно и тогда получишь эти id. |