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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с файлами 
:(
    Опции темы
NiJazz
  Дата 17.10.2003, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Привет!
Нужно так сделать: открыть заданную пользователем папку и переименовать в ней все файлы. Как? smile.gif
А можно так, чтобы он бегал по все папкам в текущей и переименовывал все файлы?
ЗЫ Сорри, в делфе не мастак. smile.gif
PM MAIL   Вверх
Cashey
Дата 17.10.2003, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

Репутация: 2
Всего: 60



Информация к размышлению
Процедуры и функции управления файлами

FindFirst(const Path: string; Attr: Integer; var F:TSearchRec): Integer - Выделяет в памяти необходимые ресурсы для поиска в каталоге и шаблоне Path (например, c:\MyDir\*.*) файлов, удовлетворяющих шаблону и имеющих атрибуты Attr (см. FileSetAttr). При успешном завершении возвращает 0, в противном случае - код ошибки Windows. Результаты поиска заносятся в запись SearchRec. Из полей этой записи можно извлечь результаты: Time: Integer - время создания файла, Size: Integer - его размер, Attr: Integer - его атрибуты, Name - имя файла и некоторые другие.

FindNext(var F: TSearchRec): Integer - Продолжает поиск, начатый функцией FindFirst. Если нашелся новый файл, возвращает 0, в противном случае - код ошибки Windows. Результаты поиска заносятся в запись SearchRec (см. FindFirst).

RenameFile(const OldName, NewName: string ): Boolean - Переименовывает файл OldName, давая ему новое имя NewName. При успешном завершении возвращает true.

FindClose(var F: TSearchRec) - Освобождает память, выделенную процедурой FindFirst, и прерывает последовательность поиска процедурами FindFirst и FindNext, использующего запись F типа TSearchRec.

FileSetAttr(const FileName: string; Attr: Integer): Integer - Задает атрибуты Attr файла FileName. При успешном завершении возвращает 0, в противном случае - код ошибки Windows. При формировании Attr можно складывать по операции OR константы faXXXX

FileSearch(Const Name, DirList: string): string - Ищет файл Name в списке каталогов DirList, записанном в формате DOS для PATH: каталоги, разделенные точками с запятой. Если файл найден - возвращается полный путь к нему, в противном случае - пустая строка.

FileGetDate(Handle: Integer): Integer - Возвращает в формате DOS дату и время создания файла, определенного своим дескриптором Handle.

FileExists(const FileName: string): Boolean - Возвращает true, если существует файл FileName.

FileGetAttr(const FileName: string): Integer - Возвращает атрибуты файла FileName. Наличие тех или иных атрибутов может быть проверено сложением по операции AND возвращенного значения с константами faXXXX.

FileAge(const FileName: string): Integer - Возвращает время создания файла FileName.

ExtractFilePath(const FileName: string): string - Возвращает путь к каталогу (включая указание диска и слэш перед именем файла), вырезанный из строки с полным именем файла FileName.

ExtractFileDir - Возвращает путь к каталогу (включая указание диска), вырезанный из строки с полным именем файла FileName.

ExtractFileExt - Возвращает символы расширения, вырезанные из строки с полным именем файла FileName.

ChangeFileExt - Изменяет расширение файла FileName на Extension.

Вообще-то, это все в основном, перевод родного хелпа.


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
NiJazz
Дата 17.10.2003, 11:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Cashey, вот про FindFirst и FindNext я знаю. Только семантика их туманна. Есть что более наглядное?
PM MAIL   Вверх
Cashey
Дата 17.10.2003, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бессмертный
****


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

Репутация: 2
Всего: 60



Ну а чего здесь не понятного? В простейшем случае твоя задача решается таким образом:
Код
procedure TForm1.Button1Click(Sender: TObject);
var
sr: TSearchRec;
FileAttrs: Integer;
begin
     //repeat
       if FindFirst('c:\MyDir\*.txt',FileAttrs, sr) = 0 then
        RenameFile('C:\MyDir\'+sr.Name, 'C:\MyDir\123.txt'{или ф-ция присвоения имени});
     //FindNext(sr);
    // until FindNext(sr) <> 0;
end;

Закоментирован вариант, когда надо переименовать >1 файла, тогда надо написать ф-цию, которая динамически создает новое имя файла (2 файла с одним именим в одной директории находится не могут)

Это сообщение отредактировал(а) Cashey - 17.10.2003, 13:32


--------------------
библия учит любить ближнего, а камасутра обучает как именно
PM Jabber   Вверх
NiJazz
Дата 17.10.2003, 17:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Cashey, спасибо. В имени файла обязательно прописывать полный путь к нему. Можно так, чтобы без пути?
PM MAIL   Вверх
Pakshin A. S.
Дата 17.10.2003, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

Репутация: 21
Всего: 61



1) А чем тебя это не устраивает?
2) Зачем делать кому-то такую подлянку, ведь это нехорошо!!!
PM   Вверх
December
Дата 17.10.2003, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Antitheorist
****


Профиль
Группа: Участник
Сообщений: 4423
Регистрация: 14.8.2002
Где: Харьков

Репутация: 8
Всего: 57



NiJazz, лови, довольно удобная процедурина.
Код

procedure ScanDir (Path:string;SearchMask:TStrings;ScanSub:boolean);
var
 SearchRec:TSearchrec;
 a,i:integer;
 wstr:string;
begin
if ScanSub then
  begin
  FindFirst(path+'\*.*',faDirectory,SearchRec);{.  found}
  FindNext(SearchRec);                         {.. found}
  a:=FindNext(SearchRec);
  while a=0 do
       begin
       if (SearchRec.Attr and faDirectory)>0 then ScanDir(Path+'\'+SearchRec.Name,SearchMask,ScanSub);
       a:=FindNext(SearchRec);
       end;{while}
  FindClose(SearchRec);
  end;{if}
for i:=0 to SearchMask.Count-1 do
begin
a:=FindFirst(Path+'\'+SearchMask[i],faAnyFile,SearchRec);
while a=0 do
  begin
  if (SearchRec.Name='.') or (SearchRec.Name='..') then
               begin
               a:=FindNext(SearchRec);
               continue;
               end;{if}

//OPERATION ON FILE

  a:=FindNext(SearchRec);
  end;{while}
FindClose(SearchRec);
end;{for}

end; {ScanDir}



procedure TForm1.Button1Click(Sender: TObject);
var
 wstrs:TStrings;
begin
ParentPath:=LabeledEdit1.Text;
wstrs:=TStringList.Create;
if LabeledEdit2.Text='' then wstrs.Add('*.*') else wstrs.CommaText:=LabeledEdit2.Text;
ScanDir(ParentPath,wstrs,true);
wstrs.free;
end;





--------------------
Для друзей с винграда - скидки на разработку сайтов
PM MAIL WWW ICQ   Вверх
NiJazz
Дата 17.10.2003, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



December, спасибо.
Я пока не читал, но может быть это я пойму из кода.
Но спрошу: что сделать для того, чтобы RenameFile не портила расширения файлов?
PM MAIL   Вверх
<Spawn>
Дата 18.10.2003, 06:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 44
Всего: 64



Переименовывать, указывая расширение)


--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

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

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

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

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


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

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


 




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


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

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