|
|
Регистрация | << Правила форума >> | 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
про 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. |