Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.10.2011, 04:14
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию Цикл переименования файлов

У меня два текстовых файла f1 в котором по порядку
идут пути к файлам , которые нужно переименовать, вот так они выглядят
E:\Recoverd_doc_file(1).doc
E:\Recoverd_doc_file(2).doc

Во втором файле имена на которые нужно поменять, например drivers, music оставив прежнее расширение *.doc и тд.

Но цикл останавливается на первом переименовании, как буд-то он вообще отсутствует, хотя поидее он должен продолжаться до тех пор, пока в первом текстовом файле не кончаться все строки.

Код:
procedure TForm1.Button4Click(Sender: TObject);
var

lastname:string;


begin

  AssignFile(f1, 'c:\1.txt'); // назначаю файлы со строковыми данными
  Reset(f1);
  AssignFile(f2, 'c:\2.txt');
  Reset(f2);

try


 while not EOF(f1) do begin // цикл который считывает все строки из 1 файла пока они не закончатся в buf ,а так же из 2 файла в name

  readln(f1, buf);
  readln(f2, name);


  lastname:=chosenDirectory+'\'+name+'.doc'; //преобразую путь+имя для переименования, для этого беру строку с путем к директории где он лежит+\+имя файла из второго тектовика и добавляю расширение

  RenameFile(buf,lastname ); //переименовываю файлы




 end;


finally
   Closefile(f1);
   Closefile(f2);
end;
Ответить с цитированием
  #2  
Старый 14.10.2011, 08:47
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

хм вроде все правильно написано.
а если пошагово выполнять может где недочёт какой выясниться?
А вот chosendirectory чему равен? случайно не ExtractFilePath(...) ? а то тогда после него эта часть + '\' не нужна
Ответить с цитированием
  #3  
Старый 14.10.2011, 14:57
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Вот и я в растеряности, цикл не повторяется, только одно переименовывание и всё А chosendirectory я беру из неадекватной функции
Код:
if SelectDirectory('Выберите каталог', 'e:\', chosenDirectory)
  then ...
другой не нашёл, что бы путь к директории получать, вот щас помотрю твой
ExtractFilePath(...)
Ответить с цитированием
  #4  
Старый 14.10.2011, 15:20
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Исходники, пожалуйста.
Если не хочешь сюда выкладывать, пиши в личку, но лучше на всеобщее обозрение, чтоб потом у кого подобного рода проблема возникнет, знал в чем дело.
__________________
Google в помощь

Последний раз редактировалось Ildar-tsr, 14.10.2011 в 15:29.
Ответить с цитированием
  #5  
Старый 14.10.2011, 15:59
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Мне вообще исходников не жалко, просто там много

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    Button2: TButton;
    Button3: TButton;
    Edit3: TEdit;
    Label4: TLabel;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  chosenDirectory:string;
  f1:textfile;
  f2:textfile;

  nach:integer;
  kon:integer;
  filepath:string;
  fcounter:integer;
  kolfilov:integer;

  kolstrok:integer;
  i:integer;
  stroka:string;

  listslov:array [1..20] of string;

  text:string;
  sob:string;
  co:integer;
  counterslov:integer;
  w:variant;

  buf:string;
  name1:string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

try




if SelectDirectory('Выберите каталог', 'e:\', chosenDirectory)
  then label1.Caption:=chosenDirectory


 finally
   AssignFile(f1, 'c:\1.txt');
   Rewrite(f1);

   nach:=strtoint(edit1.text);
   kon:=strtoint(edit2.text);
   kolfilov:=(kon-nach)+1;


   try

   for I := 1 to kolfilov do
   begin

   filepath:=chosenDirectory+'\'+'Recoverd_doc_file('+ inttostr(fcounter) +').doc';

   label2.Caption:=filepath;
   label3.Caption:='vsego'+inttostr(kolfilov);

   writeln(f1,filepath);
   inc (fcounter);
   end;

   finally
     Closefile(f1);
   end;
end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

  AssignFile(f1,'c:\1.txt');
  Reset(f1);
  AssignFile(f2, 'c:\2.txt');
  Rewrite(f2);

  i:=1;
  //text:='huy';




try
   while not EOF(f1) do

   begin
   try
  readln(f1, stroka);
  W:=CreateOleObject('Word.Application');
  W.Documents.Open(stroka);
  co:=1;


   for I := 1 to counterslov do begin
   text:=listslov[co];
   inc(co);
   W.Visible:=true;
   W.Selection.WholeStory;
   W.Selection.Find.Forward:=true;
   W.Selection.Find.Text:=text;
   W.Selection.Start:=0;
   W.Selection.End:=0;
    sob:=text;
   if W.Selection.Find.Execute then write(f2, sob); //ShowMessage('Hello World');
   sleep(1000);

   end;

  finally
   write(f2, '_'+#13#10);
   W.ActiveDocument.Close;

  end;

  end;

finally


   Closefile(f2);
end;


end;

procedure TForm1.Button3Click(Sender: TObject);
begin



 listslov[counterslov]:=edit3.Text;
 inc(counterslov);
 edit3.Clear;

end;

procedure TForm1.Button4Click(Sender: TObject);
var
konv:string;
lastname:string;
dlina:integer;

begin

  AssignFile(f1, 'c:\1.txt');
  Reset(f1);
  AssignFile(f2, 'c:\2.txt');
  Reset(f2);

try


 while not EOF(f1) do begin

  readln(f1, buf);
  readln(f2, name1);


  lastname:=chosenDirectory+'\'+name1+'.doc';
  label1.Caption:=lastname;

  RenameFile(buf,lastname );




 end;


finally
   Closefile(f1);
   Closefile(f2);
end;

end;

procedure TForm1.Button5Click(Sender: TObject);
begin
 RenameFile('C:\Intel\Recoverd_doc_file(1).doc', 'NewName.rar');
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
fcounter:=1;
counterslov:=1;
i:=1;
co:=1;
end;

end.

Ответить с цитированием
  #6  
Старый 14.10.2011, 17:16
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Ну посмотрел в общем. Единственное что в голову приходит так это расширение доковских файлов. Если сохранен в Word'е 2003 и старше, то расширение .docx, и следовательно у тебя ничего не меняется.

Советую сделать следующее:
Код:
if not FileExists(buh) then //если не .doc, то приписываем х =)
  buh:= buh+'x';
RenameFile(buf,lastname ); //переименовываю файлы
__________________
Google в помощь

Последний раз редактировалось Ildar-tsr, 14.10.2011 в 17:23.
Ответить с цитированием
  #7  
Старый 14.10.2011, 17:21
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
Ну посмотрел в общем. Единственное что в голову приходит так это расширение доковских файлов. Если сохранен в Word'е 2003 и старше, то расширение .docx, и следовательно у тебя ничего не меняется.
Там расширение не решает, может любое быть, хоть без расширения вобще, наверное надо мне другую функцию попробывать по переименованию. Мне тут подсказывают почитать по winapi там можно средствами винды и много проще.
Ответить с цитированием
  #8  
Старый 14.10.2011, 17:24
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от kriv0y
Там расширение не решает, может любое быть, хоть без расширения вобще, наверное надо мне другую функцию попробывать по переименованию. Мне тут подсказывают почитать по winapi там можно средствами винды и много проще.

Где там? В RenameFile?
Попробуй код дополнить тем что я написал выше, если не поможет пойдешь дальше.
__________________
Google в помощь
Ответить с цитированием
  #9  
Старый 14.10.2011, 17:50
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

И вообще перед RenameFile вставь:
Код:
ShowMessage(buh+', '+lastname);
Отпишись что показывает.
__________________
Google в помощь

Последний раз редактировалось Ildar-tsr, 14.10.2011 в 19:52.
Ответить с цитированием
  #10  
Старый 16.10.2011, 15:59
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Разобрался. Там дело вот в, чём было. RenameFile(buf,lastname );

допустим значение
buf:=c:\1.doc
last:=new.doc

И получается, функция если не знает куда файл переименовать,а у меня просто новое имя, без пути к нему new.doc , то она перемещает новоназванный файл в папку где находиться исполняемый файл приложения которое его переименновывет. Там у меня целая куча этих переименнованых файлов в папке Debug.)
Ответить с цитированием
  #11  
Старый 16.10.2011, 15:59
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
И вообще перед RenameFile вставь:
Код:
ShowMessage(buh+', '+lastname);
Отпишись что показывает.
Разобрался. Там дело вот в, чём было. RenameFile(buf,lastname );

допустим значение
buf:=c:\1.doc
last:=new.doc

И получается, функция если не знает куда файл переименовать,а у меня просто новое имя, без пути к нему new.doc , то она перемещает новоназванный файл в папку где находиться исполняемый файл приложения которое его переименновывет. Там у меня целая куча этих переименнованых файлов в папке Debug.)
Ответить с цитированием
  #12  
Старый 16.10.2011, 16:01
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

А ты гнал на RenameFile =)
Ты не мог что ли сразу в режиме отладки посмотреть что ты в RenameFile помещаешь?)
__________________
Google в помощь
Ответить с цитированием
  #13  
Старый 16.10.2011, 16:09
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
А ты гнал на RenameFile =)
Ты не мог что ли сразу в режиме отладки посмотреть что ты в RenameFile помещаешь?)
Я делфи запускаю раз в три месяца. Поэтому такие загоны и ошибки. Но вобще я не подозревал, что столько параметров даже у простых функций, а тут получается FileRename это обвёртка от FileMove и вобще целый детектив для меня. Сидел двое суток книжки читал.) Я кстати вот много ответов нашёл, кроме того как открыть папку через проводник и функция вернула путь к выбраной мной директории.?
Ответить с цитированием
  #14  
Старый 16.10.2011, 16:36
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Ищи вкладку Samples, а в ней компонент ShellTreeView. Его скрой, а когда надо будет вызвать сделай
Код:
  ShellTreeView1.Visible:= true;
А путь можно получить следующем образом
Код:
  Label1.Caption:= ShellTreeView1.Path; 
В общем поэкспериментируй, там не сложно, разберешься.
__________________
Google в помощь
Ответить с цитированием
  #15  
Старый 16.10.2011, 16:43
kriv0y kriv0y вне форума
Новичок
 
Регистрация: 20.02.2011
Адрес: Луганжелес
Сообщения: 60
Версия Delphi: 7.
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
Ищи вкладку Samples, а в ней компонент ShellTreeView. Его скрой, а когда надо будет вызвать сделай
Код:
  ShellTreeView1.Visible:= true;
А путь можно получить следующем образом
Код:
  Label1.Caption:= ShellTreeView1.Path; 
В общем поэкспериментируй, там не сложно, разберешься.

Спасибо! А то я пользовался
Код:
SelectDirectory('Выберите каталог', disk, chosenDirectory)
Но там надо disk самому указывать, а их два-три обычно, пришлось сделать Сombobox c выбором интересующего диска, вобщем неудобняки!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:17.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025