Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Неоправданное использование верхнего регистра
Старый 15.02.2009, 15:59   #1
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию Получение списка файлов

пытаюсь написать прогу, которая выводит в Memo список файлов выбранной папки и их размер через символ '|'...
получается, что выводит название папки и размер 0... вроде всё по книжке делаю...
вот код:

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, FileCtrl, StdCtrls, ExtDlgs;

type
  TForm1 = class(TForm)
    DriveComboBox1: TDriveComboBox;
    DirectoryListBox1: TDirectoryListBox;
    Button1: TButton;
    SaveTextFileDialog1: TSaveTextFileDialog;
    Memo1: TMemo;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
 i: integer;
begin
 if SaveTextfileDialog1.Execute then
   Memo1.Lines.SaveToFile(SaveTextfileDialog1.FileName);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
 SR: TSearchRec;
begin
 if FindFirst(DirectoryListBox1.Directory+'*.*',faAnyFile,SR)=0 then
  begin
   Memo1.Lines.Add(SR.Name + '|' + IntToStr(SR.Size));
   while FindNext(SR)=0 do
     Memo1.Lines.Add(SR.Name + '|' + IntToStr(SR.Size));
  end;
 FindClose(SR);
end;

end.
Нарушения:
- неоправданное использование верхнего регистра в названии темы;
- неиспользование тега "Код".
В следующий раз вкачу предупреждение.
Рекомендую прочесть правила раздела.


сорри... постараюсь быть внимательней...

Последний раз редактировалось Костян Пират; 15.02.2009 в 16:16. Причина: допущенные нарушения
Костян Пират вне форума Ответить с цитированием
Старый 15.02.2009, 16:25   #2
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

У вас не до конца путь указан в этой строчке
Код:
if FindFirst(DirectoryListBox1.Directory+'*.*',faAnyFile,SR)=0 then
Вам нужно сделать так:
Код:
if FindFirst(DirectoryListBox1.Directory+'\*.*',faAnyFile,SR)=0 then
И у вас лишняя переменная i: integer;. Она у вас не используется.
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 15.02.2009, 16:51   #3
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию

о, чёрт! точно!
спасибо! как всегда решение под носом

заработало, но ещё вопрос - в начало списка выводятся строки:
.|0
..|0


что это за строки и откуда они растут?
думал может верхние директории, но даже если через 10 вложенных папок лежит данная, всё равно 2 строки появляются...

Последний раз редактировалось Костян Пират; 15.02.2009 в 17:02. Причина: новый вопрос
Костян Пират вне форума Ответить с цитированием
Старый 15.02.2009, 17:10   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Так Винда обозначает, что нижележащий список является вложенным.
Когда работаете с каталогами и файлами, нужно отфильтровывать значения SR.Name, равные '.' и '..'
mihali4 вне форума Ответить с цитированием
Старый 15.02.2009, 17:18   #5
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Когда работаете с каталогами и файлами, нужно отфильтровывать значения SR.Name, равные '.' и '..'
для этого есть какие-то специальные функции или в ручную всё программируется?
Костян Пират вне форума Ответить с цитированием
Старый 15.02.2009, 17:22   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Вручную конечно...
Например:
Код:
if (SR.Name<>'.') and (SR.Name<>'..') then
mihali4 вне форума Ответить с цитированием
Старый 15.02.2009, 17:29   #7
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию

Terran ,mihali4 спасибо!
но продолжу быть назойливым
как выводить только имена файлов (без папок)? может вместо faAnyFile чего-то другое указать?
Костян Пират вне форума Ответить с цитированием
Старый 15.02.2009, 17:45   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Есть функция ExtractFileName...
mihali4 вне форума Ответить с цитированием
Старый 15.02.2009, 17:50   #9
Костян Пират
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 103
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Есть функция ExtractFileName...
но она по-моему выводит полное имя файла... а можно так, чтобы без пути? хотя, можно обрезать строку, но хочется полаконичней код
Костян Пират вне форума Ответить с цитированием
Старый 15.02.2009, 17:56   #10
Kotofff
Участник клуба
 
Аватар для Kotofff
 
Регистрация: 11.01.2009
Сообщений: 1,917
По умолчанию

Все правильно mihali4 сказал :
http://www.delphibasics.ru/ExtractFileName.php
"Заряженному танку в дуло не смотрят" @Dekmer in WoT
Kotofff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как задать команду загрузки файлов данных на кнопку если каталог и имена файлов известны??? Andbuba Microsoft Office Excel 2 28.12.2008 17:28
получение 1 списка из 2-х Neznau Помощь студентам 0 10.12.2008 22:16
Нужна помощь: выбор файлов исходя из имени файлов Antik163RUS Помощь студентам 4 19.06.2008 21:20
Не открывает из списка файлов ListBox SANTA_KLAUD Общие вопросы Delphi 8 27.05.2008 20:30
Печать pdf файлов из списка файлов в Excel АПС Microsoft Office Excel 5 15.04.2008 16:04