Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Делфи _ Запуск и переименование файла

Автор: AlexSCH 20.07.2006 18:27

У меня такой вопрос:
Программа написанная в делфи считывает файл, который перед этим преобразовывается другой программой, эта дополнительная программа запускается по событию через делфи программу. Получается что по нажатию кнопки в прге написанной на делфи запускается дополнительная программа на диске и преобразовывает файл формата 1 (например) в файл формата2, и только затем программа написанная на делфи считывает файл (формата 2). Получается что название файла для подпрограммы должно быть четко фиксированным, а самой прогой которая в делфи написана надо открывать файлы любого названия, но так как она использует перед открытием подпрограмму, этого сделать не получается. Вот что я придумал, при запуске основной программы (делфи) переименовывать файл нужный для открытия в то зафиксированное имя, нужное для работы подпрограммы. Как это можно сделать?

Автор: volvo 20.07.2006 19:22

AlexSCH, я не понял, в чем проблема? Ты просто не знаешь, как переименовать файл?

Var f: File;
...
Assign(f, old_name);
Rename(f, new_name);

Автор: AlexSCH 20.07.2006 21:19

не просто переименовать.
Ситуация такая, что нажав кнопку загрузить на форме, появляется диалоговое окно, где предлагается выбрать какой же файл загружать, так вот в тот момент когда я выбераю файл формата1, должно вот что произойти: этот файл который я выбираю, с помощью диалогового окна, нужно переименовать, чтобы он назывался так как это прописано в подпрограмме, которая уже в свою очередь преобразует его в формат2. просто я не знаю как связать вот тот выбор (клик) на файле в диалоговом окне выбора и какой-то переменной в делфи. просто файлов будет много и как то конкретно связать не получается, выходит что вот кликнул ты на файле и как то надо узнать (для основной программы) его имя, чтобы переименовать.

Автор: volvo 20.07.2006 22:01

Ну, если ты пользуешься TOpenDialog, то у него есть метод FileName, а вообще знаешь, что? Приведи код, и укажи, что ИМЕННО с чем ИМЕННО ты не можешь связать, почему КТО-ТО ДРУГОЙ должен догадываться, как и что с чем у тебя связано???

Автор: mj 21.07.2006 12:47

а может передавать в запускаемую программу имя файла?

Автор: AlexSCH 21.07.2006 15:30

Цитата(volvo @ 20.07.2006 18:01) *

Ну, если ты пользуешься TOpenDialog, то у него есть метод FileName, а вообще знаешь, что? Приведи код, и укажи, что ИМЕННО с чем ИМЕННО ты не можешь связать, почему КТО-ТО ДРУГОЙ должен догадываться, как и что с чем у тебя связано???

В переменную test помещается имя открываемого файла (может быть абсолютно любое), до того как начнется загрузка файла в мемо1, нужно нужно сделать временную копию и переименовать открываемый файл в hex.hex и записать его на диск в эту же директорию с программой, где уже подпрограмма сделает из hex.hex файл PB.txt, который и пойдет в мемо1
То есть в поле ?????? должно быть что-то наподобии: файл"любое имя" по открытию в OpenDialog1-->сделать копию-->переименовать копию в "hex.hex"-->записать на диск в ту же директорию где выполняется программа-->(далее с hex.hex работает подпрограмма, эта часть уже есть)-->удалить копию, переименованную в hex.hex
If OpenDialog1.Execute
then begin
Test:=OpenDialog1.FileName;
??????????????????????????????
Memo1.Lines.LoadFromFile("pb.txt");
end;
end;

Извиняюсь за неккоректные объяснения в предыдущих постах.
Заранее спасибо

Автор: Гость 25.07.2006 2:21

Действительно никто не знает как это делается?
нужно чтобы при открытии через opendialog программа переименовывала открываемый файл
Помогите пожалуйста.


Автор: Malice 25.07.2006 12:42

Цитата(Гость @ 24.07.2006 23:21) *

Действительно никто не знает как это делается?
нужно чтобы при открытии через opendialog программа переименовывала открываемый файл
Помогите пожалуйста.

Насколько я понял из твои объяснений:
Цитата
сделать копию-->переименовать копию в "hex.hex"-->записать на диск в ту же директорию где выполняется программа

Это значит скопировать открываемый файл в "hex.hex". Переименование не знаю для чего ты приплел. И если так, то вот, что тебе надо:
// процедура копирования файла
procedure CopyFile(Source, Destination: string);
var
FromF, ToF: file of byte;
Buffer: array[0..4096] of char;
NumRead: integer;
FileLength: longint;
begin
AssignFile(FromF, Source);
reset(FromF);
AssignFile(ToF, Destination);
rewrite(ToF);
FileLength := FileSize(FromF);
while FileLength > 0 do begin
BlockRead(FromF, Buffer[0], SizeOf(Buffer), NumRead);
FileLength := FileLength - NumRead;
BlockWrite(ToF, Buffer[0], NumRead);
end;
CloseFile(FromF);
CloseFile(ToF);
end;

Использование в твоем случае:
If OpenDialog1.Execute
then begin
Test:=OpenDialog1.FileName;
CopyFile(Test,'hex.hex'); // <--
............
Memo1.Lines.LoadFromFile("pb.txt");
end;
end;

Автор: AlexSCH 25.07.2006 15:06

На строке
CopyFile(Test,'hex.hex');
выдает ошибку [Error] Unit1.pas(250): Incompatible types: 'String' and 'PAnsiChar'
я так понимаю тут что-то с типами неувязка, как быть?

Автор: Malice 25.07.2006 16:15

Цитата(AlexSCH @ 25.07.2006 12:06) *

На строке
CopyFile(Test,'hex.hex');
выдает ошибку [Error] Unit1.pas(250): Incompatible types: 'String' and 'PAnsiChar'
я так понимаю тут что-то с типами неувязка, как быть?

Объяви test как String, или пиши CopyFile(OpenDialog1.FileName,'hex.hex');

Автор: AlexSCH 25.07.2006 18:35

Test объявлена как string, с самого начала была.
Если пишу
CopyFile(OpenDialog1.FileName,'hex.hex');
выдает такую же ошибку про несовместимость типов 'String' and 'PAnsiChar'

Автор: Malice 25.07.2006 19:00

Цитата(AlexSCH @ 25.07.2006 15:35) *

Test объявлена как string, с самого начала была.
Если пишу
CopyFile(OpenDialog1.FileName,'hex.hex');
выдает такую же ошибку про несовместимость типов 'String' and 'PAnsiChar'

Потому, что ты используешь Api-шную функцию CopyFile (про которую я забыл), а не ту, которую привел я.
Тогда мою стирай вообще и делай так:
CopyFile(pchar(OpenDialog1.FileName),'hex.hex',true);

Автор: hardcase 25.07.2006 19:21

Люди, вы чего ерундой откровенной занимаетесь?
Зачем переименовывать, копировать.....
Есть такие вещи как hardlink-жесткие ссылки. Создать временно жёсткую ссылку на файл и всё!

Апишка: CreateHardLink

Примечание: этот способ будет работать на NTFS.

Жёсткую ссылку можно удалить как обычный файл.

Автор: AlexSCH 25.07.2006 19:56

Большое всем спасибо (особенно Malice) за оказанную помощь, все заработало как требовалось.