Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка содержимого папки... как?.. 
V
    Опции темы
IamDreamer
Дата 3.2.2006, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Как проверить пуста ли директория (не всякими FindFirst'ами)? И как узнать последний ли текущий файл в директории?

Это сообщение отредактировал(а) IamDreamer - 3.2.2006, 13:33
PM MAIL WWW Jabber   Вверх
Rennigth
Дата 3.2.2006, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(IamDreamer @ 3.2.2006, 13:26 Найти цитируемый пост)

не всякими FindFirst'ами

Чем не устраивает?
Добавлено @ 13:38
Винда думаешь как-то по другому это делает? FindFirst, FindNext - просто обертка техже виндовых методов.
Добавлено @ 13:39
Цитата(IamDreamer @ 3.2.2006, 13:26 Найти цитируемый пост)

текущий файл в директории

что ты имеешь ввиду текущим?



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Romikgy
Дата 3.2.2006, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Код

SendMessage(ListBox1.Handle,LB_DIR,DDL_READWRITE,PChar('C:\'));



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
IamDreamer
Дата 3.2.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Цитата(Rennigth @ 3.2.2006, 13:33)
что ты имеешь ввиду текущим?

Короче хочу сделать переименовальщик (самому лень переименовывать), типа, допустим, все фотки будут иметь имя "001", "002" и т.д. Вот, задаешь папку и, если она непуста (как это проверить), то начинает их (файлы) переименовывать. Дык как проверить (или это не надо) является последний переименованный файл последним в папке?
PM MAIL WWW Jabber   Вверх
Romikgy
Дата 3.2.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Имхо загнал в листбокс все файлы, а далее с этим списком и работаешь, без проверок на посл. файл или нет.


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
IamDreamer
Дата 3.2.2006, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Цитата(Romikgy @ 3.2.2006, 17:56)
Имхо загнал в листбокс все файлы, а далее с этим списком и работаешь, без проверок на посл. файл или нет.

А как с ним работать?
Код

...
FileListBox1.FileName := '';
...

Мало к чему приводит, а именно к ошибке.
PM MAIL WWW Jabber   Вверх
Albinos_x
Дата 3.2.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(IamDreamer @ 3.2.2006, 17:50 Найти цитируемый пост)

Дык как проверить (или это не надо) является последний переименованный файл последним в папке?

непонятно зачем это нужно?
Цитата(IamDreamer @ 3.2.2006, 18:06 Найти цитируемый пост)

...
FileListBox1.FileName := '';
...

Мало к чему приводит, а именно к ошибке.

конечно... такого пути нет....
Цитата(IamDreamer @ 3.2.2006, 18:06 Найти цитируемый пост)

А как с ним работать?

предлогают загнать в обчный ListBox....:
Код
...
// код в котором записываешь в личбокс файлы из папки с помощью FindFirst
...
if ListBox1.Count=0 then
  begin
  // действия если файлов папке нет
  end
  else
  begin
  // переименовываем файлы
  for i:=0 to (ListBox1.Count-1) do  // цикл по всем файлам
     if i<>ListBox1.Count-1 then     // если файл не последний
        RenameFile(ListBox1.Items[i],(Inttostr(I+1)+ExtractFileExt(ListBox1.Items[i])))
        else                                     // если файл последний
         {твои действия если файл последний};
  end;
...

Добавлено @ 18:41
Тоже самое можно проделать и с FileListBox
Код

...    
if FileListBox1.Count=0 then    
  begin    
  // действия если файлов папке нет    
  end    
  else    
  begin    
  // переименовываем файлы    
  for i:=0 to (FileListBox1.Count-1) do  // цикл по всем файлам    
     if i<>FileListBox1.Count-1 then     // если файл не последний    
        RenameFile(FileListBox1.Directory+'\'+FileListBox1.Items[i],(Inttostr(I+1)+ExtractFileExt(FileListBox1.Directory+'\'+FileListBox1.Items[i])))    
        else                                     // если файл последний    
         {твои действия если файл последний};    
  end;    
...



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
IamDreamer
Дата 4.2.2006, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Цитата(Albinos_x @ 3.02.2006,18:31)
Код

     RenameFile(ListBox1.Items[i],(Inttostr(I+1)+ExtractFileExt(ListBox1.Items[i])))

Нельзя ли заменить на
Код

...
Rename(FileListBox1.Items[i], '00'+IntToStr(i+1));
...

И что такое ExtractFileExt(ListBox1.Items[i]?
PM MAIL WWW Jabber   Вверх
Albinos_x
Дата 4.2.2006, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(IamDreamer @ 4.2.2006, 19:13 Найти цитируемый пост)

И что такое ExtractFileExt(ListBox1.Items[i])?

получение расширения файла...
тогда в твоём случае:
Код

RenameFile(ListBox1.Items[i],('00'+Inttostr(I+1)+ExtractFileExt(ListBox1.Items[i])))

как понял из предыдущего поста, то тебе обязательно нужно 3-х значное число тогда:
Код

var val:string;
      i:word;
...
...
val:=Inttostr(I+1);
case length(val) of
    1 : val:='00'+val;
    2 : val:='0'+val;
   end;
val:=val+ExtractFileExt(ListBox1.Items[i]);
RenameFile(ListBox1.Items[i],val);
...


Это сообщение отредактировал(а) Albinos_x - 4.2.2006, 20:02


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
IamDreamer
Дата 4.2.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



Albinos_x:
А что возвращает функция ExtractFileExt? Она же Integer.

Это сообщение отредактировал(а) IamDreamer - 4.2.2006, 20:02
PM MAIL WWW Jabber   Вверх
Albinos_x
Дата 4.2.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата

function ExtractFileExt(const FileName: string): string; 
 
Извлекает из строки с полным именем файла FileName часть, содержащую его расширение. 




--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
IamDreamer
Дата 4.2.2006, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



А почему при использовании Rename'a получается следующее: старое имя: img_001, новое (после ренейма) 000.jpg1, а расширение файла остается .jpg.
Код

Var i: Integer;
s: string;
begin
  for i:= 0 to FileListBox1.Count-1 do
    begin
       s:= s+IntToStr(i);
       case length(s) of
       1: s:= '000' ;
       2: s:= '00'+s;
       3: s:= '0' +s;
       end;
       s:= s+ExtractFileExt(FileListBox1.Items[i]);
       RenameFile(FileListBox1.Items[i],s);
    end;

К моему предыдущему сообщению: извиняюсь, не то спросил, имел ввиду FileListBox1.Items.

Это сообщение отредактировал(а) IamDreamer - 4.2.2006, 21:05
PM MAIL WWW Jabber   Вверх
Демо
Дата 4.2.2006, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



И чем тебя FindFirst/FindNext/FindClose не устроил?
Пишется всё буквально за 10-15 минут:

Код

{$WARN SYMBOL_PLATFORM OFF}
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Поиск файлов в каталоге и его покаталогах с фильтром по маске и исключением
//из поиска всех файлов, атрибуты которых попадают в aExcludeAttr
procedure GetFiles(const aPath,aMask: String;var aListFile: TStringList;const aExcludeAttr: Integer=0);
var
  SR: TSearchRec;
  tPath: String;
begin
  tPath := IncludeTrailingBackSlash(aPath);
  if FindFirst(tPath+'*.*',faAnyFile,SR)=0 then
  begin
    try
      repeat
        if (SR.Name='.') or (SR.Name='..') then Continue;
        if (SR.Attr and faDirectory)<>0 then GetFiles(tPath+SR.Name,aMask,aListFile,aExcludeAttr);
        if (aExcludeAttr<>0) and (SR.Attr and aExcludeAttr <> 0) then Continue;
        if MatchesMask(SR.Name,aMask) then aListFile.Add(tPath+SR.Name);
      until FindNext(SR)<>0;
    finally
      Sysutils.FindClose(SR);
    end;
  end;
end;


function RenFiles(const SrcPath,DestPath,Mask: String;isMove: Boolean=False): Integer;
var
  L: TStringList;
  i: Integer;
  DestFile: String;
begin
  Result := 0;
  try
    if not DirectoryExists(DestPath) then
    begin
      if not CreateDir(DestPath) then Exit;
    end;
  except
    Exit;
  end;
  L := TStringList.Create;
  try
    GetFiles(SrcPath,Mask,L);
    for i := 0 to L.Count-2 do
    begin
      DestFile := ExtractFileName(L[i]);
      DestFile := ChangeFileExt(DestFile,'.'+Format('%d',[i+1]));
      DestFile := IncludeTrailingBackSlash(DestPath)+DestFile;
      if isMove
        then MoveFile(PChar(L[i]),PChar(DestFile))
        else CopyFile(PChar(L[i]),PChar(DestFile),False);
    end;
    //Здесь обрабатываем последний файл (L[L.Count-1])
  finally
    L.Free;
  end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RenFiles('d:\mp1','d:\mp2','*.jpg',False);
end;

end.




--------------------
    
PM MAIL ICQ Skype   Вверх
Albinos_x
Дата 4.2.2006, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата(IamDreamer @ 4.2.2006, 21:00 Найти цитируемый пост)

А почему при использовании Rename'a получается следующее: старое имя: img_001, новое (после ренейма) 000.jpg1, а расширение файла остается .jpg.

по тому что я приводил должно получаться не 000.jpg1, а 001.jpg...
расширение остаётся именно из-за функции ExtractFileExt(const FileName: string): string... если её не применять, то расширения у переименованных файлов не будет...
Цитата(IamDreamer @ 4.2.2006, 21:00 Найти цитируемый пост)

К моему предыдущему сообщению: извиняюсь, не то спросил, имел ввиду FileListBox1.Items.

не, так не получится... т.к. FileListBox1.Items[i] будет возвращять только имена файлов, а для того чтоб файл переименовать этого недостаточно... нужно знать и место его нахождения... т.е. полный путь с именем файла... для этого и нужно делать:
Код

s:=FileListBox1.Directory+'\'+FileListBox1.Items[i]

чтоб получить этот полный путь...
да ещё у меня ошибка...забыл что в строке с новым именем, тоже должен содержаться полный путьк файлу...т.е.:
Код

var val:string;    
      i:word;    
...    
...
val:=Inttostr(I+1);    
case length(val) of    
    1 : val:='00'+val;    
    2 : val:='0'+val;    
   end;    
val:=ExtractFilePath(ListBox1.Items[i])+val+ExtractFileExt(ListBox1.Items[i]);    
RenameFile(ListBox1.Items[i],val);    
...

тоже и для FileListBox:
Код
...
val:=FileListBox1.Directory+'\'+val+ExtractFileExt(FileListBox1.Items[i]);
RenameFile(FileListBox1.Directory+'\'+FileListBox1.Items[i],val);    
...



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
IamDreamer
Дата 12.2.2006, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 867
Регистрация: 6.6.2005

Репутация: нет
Всего: 7



А как "обновить" FileListBox? В смысле, чтобы после переименовывания он показал файлы с новым именем.
PM MAIL WWW Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0588 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.