|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Присвоить файлу имя папки в которой он находится |
|
|
Delphi - Присвоить файлу имя папки в которой он находится
|
Новый участник Сообщения: 5 |
Здравствуйте, возникли трудности. Нужно чтобы при клике по кнопке программа создавала копию файла из указанной директории, переименовала ее(присвоив имя каталога, в котором находится) и создавала ярлык на рабочем столе
procedure TForm1.Button2Click(Sender: TObject); var Pst: PChar; fullFileName, CommDesk, NewName: string; begin fullFileName := OpenDialog1.FileName; //извлекаем полный путь к файлу NewName:=ChangeFileExt(ExtractFileDir(fullFileName),'')+'_newfile.rar'; //создаем новое имя файла и добавляем окончание CopyFile(PChar(Edit1.Text), PChar(NewName), false); //копируем файл с новым именем GetMem(Pst,MAX_PATH+1); try SHGetSpecialFolderPath(0,Pst,CSIDL_COMMON_DESKTOPDIRECTORY,False); CommDesk:=String(Pst); CreateShotCut(NewName, CommDesk+'\'+ExtractFileName(NewName)+'.lnk', ''); finally FreeMem(Pst); end; end. |
|
Отправлено: 12:44, 21-06-2015 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Можно ждать решение проблемы, а можно вспомнить о процедуре GetCurrentDir и самому посмотреть "когда происходит изменение текущего каталога", ну и вернуть все в нужное русло SetCurrentDir.
Вообще по куску кода понять трудно...если OpenDialog1, то где OpenDialog1.Execute, так как, fullFileName, это локальная переменная. CreateShoRtCut наверное своя и что в ней, неизвестно, а это, в свою очередь, связанно с правильной передачей паскалевских строк в виде PChar в функции, которые будут их модифицировать. Как-то так! |
------- Последний раз редактировалось opel431, 21-06-2015 в 15:54. Отправлено: 14:43, 21-06-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать opel431, GetCurrentDir показывает правильную директорию, видимо все связано с переименованием, уже думаю как применить movefile, правда совсем не ясно, как это сделать, если папка каждый раз разная
|
Отправлено: 15:37, 21-06-2015 | #3 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата Fly5:
Искать, самое занятное в процессе! Цитата Fly5:
Ну, что, выяснили что у Вас в NewName....? |
||
------- Последний раз редактировалось opel431, 22-06-2015 в 00:06. Отправлено: 16:11, 21-06-2015 | #4 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать NewName выдает все верно, что самое то странное. Добавил форму, чтобы было нагляднее. Пробовал по разному и как у вас тоже, но упорно сохраняется в другой папке, либо в нужной без имени папки, но лишь с окончанием _newnewfile.rar.
|
|
Последний раз редактировалось Fly5, 22-06-2015 в 01:06. Отправлено: 00:57, 22-06-2015 | #5 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата Fly5:
Просмотрел в блокноте Ваш код (на планшете более не могу ничем помочь). Вы ведь из примера не реализовали ничего! Где FolderName? Как Вы сохраняете папку источник файла - загоняйте в переменную FolderName, как показано в примере, а в Edit1.Text := полный путь к файлу источнику, как у Вас. Далее, как в примере NewName :=Copy(ChangeFileExt(ExtractFileDir(fullFileName), '') + '_newfile.rar', 4, Length(ChangeFileExt(ExtractFileDir(fullFileName), '') + '_newfile.rar')); (получаете нужное Вам имя с названием папки источник) и объединяйте с папкой хранящейся в переменной FolderName - CopyFile(PChar(Edit1.Text), PChar(FolderName+NewName), false); Все упирается в отсутствии правильного сохранения самой папки источника и полного пути к файлу источнику! Выведите через ShowMessage( FolderName+NewName) и ShowMessage(NewName), увидите разницу. |
|
------- Последний раз редактировалось opel431, 22-06-2015 в 02:06. Отправлено: 01:49, 22-06-2015 | #6 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Пробовал по всякому или получается один ярлык, но нет файла, либо файл с ярлыком, но в другой папке и эту чертову переменную примерял по всякому, как мне кажется. Подскажите лучше тогда как ярлыку присвоить имя папки, это попроще будет чем все эти дебри
|
Отправлено: 02:02, 22-06-2015 | #7 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Цитата Fly5:
|
|
------- Последний раз редактировалось opel431, 22-06-2015 в 05:15. Причина: дал пример Отправлено: 02:12, 22-06-2015 | #8 |
![]() Ветеран Сообщения: 1803
|
Профиль | Отправить PM | Цитировать Не знаю Ваши планы, но я бы решал задачу так вместо завтрака и отдыха после ночной, оставляя Вашу основу:
|
------- Последний раз редактировалось opel431, 22-06-2015 в 06:45. Отправлено: 05:14, 22-06-2015 | #9 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать opel431, спасибо большое, сам бы я не дошел до этого. Единственное что получается, что ярлык имеет не полное имя папки, а лишь ее часть и у ярлыка остается в имени расширение файла, какой параметр отвечает за полное имя папки? Еще хочется второй вариант попробовать, создать копию файла с новым окончанием, не добавляя имя папки, а уже при создании ярлыка присвоить ярлыку имя папки.(Проще говоря изменить только код создания ярлыка) Этот код
вызвал у меня тихих ужас, честно говоря ничего не понял, что он делает, ну да это уже мои проблемы. Просто еще хотел бы спросить совета какие книжки почитать? Вроде все советуют Фленова, ну у всех мнения разные.
|
Отправлено: 13:03, 22-06-2015 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Найти в реестре параметр и записать в переменную имя ветки в которой он находится | root221 | Скриптовые языки администрирования Windows | 11 | 25-11-2012 07:54 | |
CMD/BAT - [решено] Записать имя папки в которой лежит батник в переменную а потом эту же папку переим. | bobr95 | Скриптовые языки администрирования Windows | 8 | 10-04-2012 18:42 | |
Интерфейс - При создании новой папки запускается программа, на которой находится фокус | javajim | Microsoft Windows 7 | 11 | 26-02-2011 12:13 | |
7 / 2008 R2 - [решено] Присвоить имя компьютеру | Hector | Автоматическая установка Windows 11 / 10 / 8 / 7 / Vista | 5 | 24-04-2010 01:51 | |
VBS/WSH/JS - [решено] Присвоить атрибуты файлу/папке через скрипт | boss911 | Скриптовые языки администрирования Windows | 4 | 10-11-2009 06:19 |
|