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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2014, 08:06   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
Печаль Не получается правильно переименовать файлы

В общем суть в чём, мне надо что бы программка переименовывала все txt файлы в формат 001,002,003, и т.д.
Я написал код:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TSearchRec;
  pics,i:integer;
begin
  pics:=0;
  if FindFirst(ExtractFilePath(Application.ExeName)+
  '\*.txt', faAnyFile, fs)=0 then
    repeat
      inc(pics);
    until
      FindNext(fs) <> 0;
  FindClose(fs);

ShowMessage('Этап 2');


if FindFirst(ExtractFilePath(Application.ExeName)+
'\*.txt', faAnyFile, fs)=0 then
repeat
for i:=1 to Pics do
begin
if Length(IntToStr(i))=1 then
RenameFile(ExtractFilePath(Application.ExeName)+
       fs.Name,ExtractFilePath(Application.ExeName)+
       '00'+IntToStr(i)+'.txt')
else if Length(IntToStr(i))=2 then
RenameFile(ExtractFilePath(Application.ExeName)+
       fs.Name,ExtractFilePath(Application.ExeName)+
       '0'+IntToStr(i)+'.txt')
else if Length(IntToStr(i))=3 then
RenameFile(ExtractFilePath(Application.ExeName)+
       fs.Name,ExtractFilePath(Application.ExeName)+
       IntToStr(i)+'.txt');
end;
until
FindNext(fs) <> 0;
FindClose(fs);
end;
Я понимаю что написал не очень красиво, но суть щас не о том...
В общем, он переименовывает всё, но есть небольшая проблема.
__________________________________
я создал 10 txt файлов, с именами: 1,2,3...10
и в них сохранил их порядковый номер.
И как программа переименовала:
Новое название файла: Старое название файла:
001 1
010 2
002 3
003 4
004 5
005 6
006 7
007 8
008 9
009 10
___________________________________ __________
Суть в том, что он после 1.txt начал переименовывать 10.txt, а не 2.txt...
Вопрос: Как это можно исправить?
Спасибо
Janger вне форума Ответить с цитированием
Старый 20.02.2014, 09:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
i:=1;
repeat
s:=IntToStr(i); while Length(s)<3 do s:='0'+s; inc(i);

RenameFile(ExtractFilePath(Application.ExeName)+
       fs.Name,ExtractFilePath(Application.ExeName)+
       s+'.txt');

until FindNext(fs) <> 0;
FindClose(fs);
Так подходит?

P.S. не пойму зачем тут цикл for, но выяснять не буду.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.02.2014, 10:11   #3
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
s:=IntToStr(i); while Length(s)<3 do s:='0'+s; inc(i);
это тоже лишнее
eval вне форума Ответить с цитированием
Старый 20.02.2014, 10:19   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

1. Если хочешь, чтобы упорядоченность по именам сохранилась, значит исходный список файлов нужно отсортировать и только после этого переименовывать
2. Только кажется, что среди файлов не будет уже файла, например, с именем 001.txt. Запросто может быть. Что случится при попытке переименования другого файла в 001.txt? А случится облом
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.02.2014, 19:29   #5
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Код только сократился, а проблема не решилась
Janger вне форума Ответить с цитированием
Старый 20.02.2014, 20:07   #6
doktor255
Заблокирован
 
Регистрация: 31.03.2011
Сообщений: 976
По умолчанию

Код:
for i := 1 to 100 do
if fileExists(... + IntToStr(i) + '.txt') then
  RenameFile(... + IntToStr(i) + '.txt', ... + format('%.3u',[i]) + '.txt';
doktor255 вне форума Ответить с цитированием
Старый 20.02.2014, 20:10   #7
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

все под формат, что за полумеры, еще сократится
eval вне форума Ответить с цитированием
Старый 20.02.2014, 22:41   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
это тоже лишнее
Почему лишнее?
P.S. А! Все. понял. Согласен.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переименовать файлы в папке FakeGen Общие вопросы Delphi 19 04.08.2011 10:34
Не получается настроить правильно роутер ImmortalAlexSan Компьютерное железо 6 06.11.2010 15:12
Переименовать файлы в папке (с условием) Gvaridos Microsoft Office Excel 3 01.11.2010 11:31
Как правильно переименовать окно? Sandyron Общие вопросы Delphi 7 16.11.2009 22:34
Переименовать файлы по списку!? jungo Microsoft Office Excel 14 19.05.2008 11:43