IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Запуск и переименование файла
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской

Репутация: -  0  +


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


Гость






AlexSCH, я не понял, в чем проблема? Ты просто не знаешь, как переименовать файл?
Var f: File;
...
Assign(f, old_name);
Rename(f, new_name);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской

Репутация: -  0  +


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


Гость






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


Adminь
****

Группа: Пользователи
Сообщений: 803
Пол: Мужской
Реальное имя: Евгений

Репутация: -  5  +


а может передавать в запускаемую программу имя файла?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской

Репутация: -  0  +


Цитата(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;

Извиняюсь за неккоректные объяснения в предыдущих постах.
Заранее спасибо
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






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

 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(Гость @ 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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской

Репутация: -  0  +


На строке
CopyFile(Test,'hex.hex');
выдает ошибку [Error] Unit1.pas(250): Incompatible types: 'String' and 'PAnsiChar'
я так понимаю тут что-то с типами неувязка, как быть?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(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');
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской

Репутация: -  0  +


Test объявлена как string, с самого начала была.
Если пишу
CopyFile(OpenDialog1.FileName,'hex.hex');
выдает такую же ошибку про несовместимость типов 'String' and 'PAnsiChar'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #12


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


Цитата(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);
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


code warrior
****

Группа: Пользователи
Сообщений: 484
Пол: Мужской
Реальное имя: Славен

Репутация: -  8  +


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

Апишка: CreateHardLink

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

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


--------------------
ИзВ ин ИтЕ зА нЕ рОв НЫй П оч ЕРк
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 36
Пол: Мужской

Репутация: -  0  +


Большое всем спасибо (особенно Malice) за оказанную помощь, все заработало как требовалось.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 21.11.2017 0:03
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"