Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > переименование и копирование файла


Автор: M@100DON 4.11.2007, 20:46
У меня в проге стоит listbox и мне хотелось бы что бы по клику на кнопку выскакивал OpenDialog,выбирался файл и выбраный файл переименовывался в название в listbox и далее копировался в папку!

Автор: kemiisto 4.11.2007, 22:00
Процедура обработчик события нажатия кнопки должна быть примерна такая:

Код

procedure TForm1.Button1Click(Sender: TObject);
var
  OldFile, NewFile: string;
begin
  if not OpenDialog1.Execute then
    Exit;
  OldFile := OpenDialog1.FileName;
  NewFile := ChangeFilePath(ListBox1.Items.Strings[ListBox1.ItemIndex], 'c:\');
  CopyFile(PChar(OldFile), PChar(NewFile), True);
end;


Если я правильно понял.

Добавлено через 1 минуту и 19 секунд
Вместо 'c:\' укажи папку, куда хочешь скопировать файл.

Автор: M@100DON 5.11.2007, 21:12
Я наверно не правильно понимаю как пользоваться этим кодом!
Короче у меня выбивает ошибку на строке с ChangeFilePath, "value assignet to we newer used"
Обьясни в чём загвоздка!

Автор: kemiisto 5.11.2007, 21:37
Цитата
value assignet to we newer used
 это видимо Value assigned to we never used.

Ну, это не Error(ошибка), а всего лишь Hint(подсказка); компилятор озадачен тем, что значение переменной we присваивается, а далее эта переменная нигде не используется.

Сама же ошибка может происходить из-за того, что в ListBox1 не выделен элемент.

Код

NewFile := ChangeFilePath(ListBox1.Items.Strings[ListBox1.ItemIndex], 'c:\');
 

Как видишь, здесь (ListBox1.Items.Strings[ListBox1.ItemIndex]) я узнаю текст выделенного элемента, а если ничего не выделено - будет не хорошо!

Добавлено через 1 минуту и 9 секунд
Кстати, а че это за переменная we?

Автор: M@100DON 5.11.2007, 21:48
Цитата(kemiisto @ 5.11.2007,  19:37)


Сама же ошибка может происходить из-за того, что в ListBox1 не выделен элемент.


Так ка же элемент может быть сразу выделен еси задача моей проги извлеч из файла эти элементы ,  а только потом их менять!

Автор: kemiisto 5.11.2007, 21:53
Цитата

У меня в проге стоит listbox и мне хотелось бы что бы по клику на кнопку выскакивал OpenDialog,выбирался файл и выбраный файл переименовывался в название в listbox и далее копировался в папку!


Цитата

задача моей проги извлеч из файла эти элементы ,  а только потом их менять


Так в чем все-таки задача?

Автор: M@100DON 5.11.2007, 21:56
Выбраный файл разбирается на n-количество *.gif и сразу список отображается в ListBox, а потом файл выделленый в listbox нужно менять!

Автор: kemiisto 5.11.2007, 22:09
Так....
Значит сначала ты выбираешь некий файл, который 
Цитата
разбирается на n-количество *.gif и сразу список отображается в ListBox
. 
Потом выбираешь еще файл. Им заменяешь тот, который сейчас выделен в ListBox.

Я правильно понял?

Автор: M@100DON 5.11.2007, 22:11
Да, выделяю файл в списке и по кнопке выбираю файл, которым нуна заменить существующий!

Автор: kemiisto 5.11.2007, 22:22
Ну изначально я почти так и понял!

Попробуй так:

вместо
Код

CopyFile(PChar(OldFile), PChar(NewFile), True);
 

Код

CopyFile(PChar(OldFile), PChar(NewFile), False);
 

Автор: M@100DON 5.11.2007, 22:27
Не катит, ошибку выдаёт всеравно на строке :
Код
NewFile := ChangeFilePath(ListBox1.Items.Strings[ListBox1.ItemIndex], 'c:\');


Автор: kemiisto 5.11.2007, 22:29
Это хотя бы позволит заменить существующий!

А вот почему ошибка вылетает? Может скриншот даш?

Добавлено через 2 минуты и 7 секунд
Слушай, а ты второй параметр ('c:\') на свой путь изменил?

Автор: M@100DON 5.11.2007, 22:44
ХЗ, а какой те скриншот дать, ну вот после нажатия на F9
user posted image

Автор: kemiisto 5.11.2007, 22:55
Ну тут же черным по белому написано (3 строка закладки Build) 

[Error] ... Undeclared identifier ChangeFilePath

у тебя в uses есть SysUtils?

Автор: M@100DON 5.11.2007, 23:00
Цитата(kemiisto @ 5.11.2007,  20:55)


у тебя в uses есть SysUtils?

Ну да есть!

Автор: kemiisto 5.11.2007, 23:13
А это Delphi какой версии? 

Просто функция ChangeFilePath находится в модуле ЫныГешдыю У тебя он подключен, а Delphi ругается!

Автор: M@100DON 5.11.2007, 23:16
У меня Delphi 7 .

Автор: kemiisto 5.11.2007, 23:17
Знаешь ты тогда  лучше опиши ее сам прямо в Unit1:

Код

function ChangeFilePath(const FileName, Path: string): string;
begin
  Result := IncludeTrailingPathDelimiter(Path) + ExtractFileName(FileName);
end;


Странно, что ее в SysUtils нету...  smile 

Автор: M@100DON 5.11.2007, 23:27
Прога запустилась, файлы не копируются!

Автор: kemiisto 5.11.2007, 23:43
Ну это уже хоть что-то!

Да, кстати в Delphi 7 в SysUtils такой (ChangeFilePath) функции еще не было!

Я вот смотрю на скриншот и там вижу ошибку: ты отображаешь OpenDialog1, а имя файла у тебя почему-то OpenDialog2.FileName.

Ты уж определись.

Эта часть кода отобразить OpenDialog1 и если пользователь просто его закроет (а не выберет файл) - произойдет выход из процедуры OnClick:
Код

  if not OpenDialog1.Execute then
    Exit;


Если же OpenDialog1.Execute вернет True то в  OpenDialog1.FileName будет имя выбранного файла.
Но уж никак ни в OpenDialog2.FileName.

Автор: M@100DON 5.11.2007, 23:55
Я не могу понять строку 
Код

OldFile := OpenDialog2.FileName;

Как может быть! Получается старый файл тоже нуна выбирать?

Автор: kemiisto 6.11.2007, 00:06
Код

procedure TForm1.Button1Click(Sender: TObject);
var
  OldFile, NewFile: string;
begin
  if not OpenDialog1.Execute then
    Exit;
  OldFile := OpenDialog1.FileName;
  NewFile := ChangeFilePath(ListBox1.Items.Strings[ListBox1.ItemIndex], 'c:\');
  CopyFile(PChar(OldFile), PChar(NewFile), False);
end;


В подробностях:

OpenDialog1.Execute вернет True, если пользователь выберет файл и False - в остальных случаях. 

Если вернет False, значит пользователь файл не выбрал и все остальные действия не нужны, поэтому:
Код

  if not OpenDialog1.Execute then
    Exit;


а если вернет True - значит пользователь файл выбрал и надо совершит некоторые дествия. 
Переменные OldFile и NewFile хранят исходное имя файла и его имя после переименования и копирования.
Исходное имя (OldFile) я получаю из OpenDialog1.FileName, новое - через ChangeFilePath.
Ну и, наконец, выполняю копирование OldFile -> NewFile.


Автор: M@100DON 6.11.2007, 15:03
Сделал как нада , но всеравно файлик не копируется! В чём прикол?

Автор: kemiisto 9.11.2007, 22:16
Слушай, может код кинешь (если возможно)?

Автор: M@100DON 10.11.2007, 22:08
Ну лан, прикрепил файло 

Автор: kemiisto 10.11.2007, 22:57
Так сложновато будет! Хотелось бы видеть весь проект! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)