![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() У меня два текстовых файла 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
|
|||
|
|||
![]() хм вроде все правильно написано.
а если пошагово выполнять может где недочёт какой выясниться? А вот chosendirectory чему равен? случайно не ExtractFilePath(...) ? а то тогда после него эта часть + '\' не нужна |
#3
|
|||
|
|||
![]() Вот и я в растеряности, цикл не повторяется, только одно переименовывание и всё А chosendirectory я беру из неадекватной функции
Код:
if SelectDirectory('Выберите каталог', 'e:\', chosenDirectory) then ... ExtractFilePath(...) |
#4
|
||||
|
||||
![]() Исходники, пожалуйста.
Если не хочешь сюда выкладывать, пиши в личку, но лучше на всеобщее обозрение, чтоб потом у кого подобного рода проблема возникнет, знал в чем дело. Google в помощь Последний раз редактировалось Ildar-tsr, 14.10.2011 в 15:29. |
#5
|
|||
|
|||
![]() Мне вообще исходников не жалко, просто там много
Код:
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
|
||||
|
||||
![]() Ну посмотрел в общем. Единственное что в голову приходит так это расширение доковских файлов. Если сохранен в Word'е 2003 и старше, то расширение .docx, и следовательно у тебя ничего не меняется.
Советую сделать следующее: Код:
if not FileExists(buh) then //если не .doc, то приписываем х =) buh:= buh+'x'; RenameFile(buf,lastname ); //переименовываю файлы Google в помощь Последний раз редактировалось Ildar-tsr, 14.10.2011 в 17:23. |
#7
|
|||
|
|||
![]() Цитата:
|
#8
|
||||
|
||||
![]() Цитата:
Где там? В RenameFile? Попробуй код дополнить тем что я написал выше, если не поможет пойдешь дальше. Google в помощь |
#9
|
||||
|
||||
![]() И вообще перед RenameFile вставь:
Код:
ShowMessage(buh+', '+lastname); Google в помощь Последний раз редактировалось Ildar-tsr, 14.10.2011 в 19:52. |
#10
|
|||
|
|||
![]() Разобрался. Там дело вот в, чём было. RenameFile(buf,lastname );
допустим значение buf:=c:\1.doc last:=new.doc И получается, функция если не знает куда файл переименовать,а у меня просто новое имя, без пути к нему new.doc , то она перемещает новоназванный файл в папку где находиться исполняемый файл приложения которое его переименновывет. Там у меня целая куча этих переименнованых файлов в папке Debug.) |
#11
|
|||
|
|||
![]() Цитата:
допустим значение buf:=c:\1.doc last:=new.doc И получается, функция если не знает куда файл переименовать,а у меня просто новое имя, без пути к нему new.doc , то она перемещает новоназванный файл в папку где находиться исполняемый файл приложения которое его переименновывет. Там у меня целая куча этих переименнованых файлов в папке Debug.) |
#12
|
||||
|
||||
![]() А ты гнал на RenameFile =)
Ты не мог что ли сразу в режиме отладки посмотреть что ты в RenameFile помещаешь?) Google в помощь |
#13
|
|||
|
|||
![]() Цитата:
|
#14
|
||||
|
||||
![]() Ищи вкладку Samples, а в ней компонент ShellTreeView. Его скрой, а когда надо будет вызвать сделай
Код:
ShellTreeView1.Visible:= true; Код:
Label1.Caption:= ShellTreeView1.Path; Google в помощь |
#15
|
|||
|
|||
![]() Цитата:
Спасибо! А то я пользовался Код:
SelectDirectory('Выберите каталог', disk, chosenDirectory) |