Не могу скопировать файлы с русскими путями

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Не могу скопировать файлы с русскими путями

Сообщение manas_anarov » 23.12.2013 00:35:16

Путь на файл который нада скопировать задается Edit2.Text. значение Edit2 может состоять из русских букв, но почемуто лазарус понимает русские символы как вопросики и отказывается копировать файл, как преобразовать Edit2 чтобы программа заработала?
Код: Выделить всё
var
  nachalniy_fail:string;
  konechniy_fail:string;
  perezapis:boolean;
begin
  nachalniy_fail:=Edit2.Text;// тут нада преобразовать в нужный для лазаруса формат
  ShowMessage(nachalniy_fail);
  konechniy_fail:=Edit1.Text;
  perezapis:=true;
  CopyFile(nachalniy_fail,konechniy_fail,perezapis);
end;
manas_anarov
новенький
 
Сообщения: 26
Зарегистрирован: 13.12.2013 20:56:59

Re: Не могу скопировать файлы с русскими путями

Сообщение VirtUX » 23.12.2013 01:10:35

nachalniy_fail := UTF8ToSys(Edit2.Text);
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Не могу скопировать файлы с русскими путями

Сообщение manas_anarov » 23.12.2013 18:16:47

VirtUX Все равно не копирует, я сделал как вы посоветовали, процедура ShowMessage(nachalniy_fail) так как и прежде показывает вопросики
manas_anarov
новенький
 
Сообщения: 26
Зарегистрирован: 13.12.2013 20:56:59

Re: Не могу скопировать файлы с русскими путями

Сообщение Лекс Айрин » 23.12.2013 19:06:14

manas_anarov, попробуйте по такому шаблону.
Код: Выделить всё
procedure F_Save;
var
  Str: TStringList;
  txt: string;
begin

  Str := TStringList.Create;
  txt := MainForm.MainEditor.Text;
  Str.Add(txt);
  Str.SaveToFile(UTF8ToAnsi(MyFile)); //общее сохранение
  MainForm.Caption := MyFile + ':LexEditor';
  Str.Free;

end;
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Не могу скопировать файлы с русскими путями

Сообщение VirtUX » 23.12.2013 19:58:22

В Edit2.Text и Edit1.Text откуда берется текст? И зачем смотреть путь (или что Вы там смотрите...) в ShowMessage?
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Не могу скопировать файлы с русскими путями

Сообщение manas_anarov » 23.12.2013 20:06:15

VirtUX писал(а):В Edit2.Text и Edit1.Text откуда берется текст? И зачем смотреть путь (или что Вы там смотрите...) в ShowMessage?

по идее текст должен браться из лист бокса(найденные файлы в указанной папке), а пока я сам набираю вручную значения Edit2 и Edit1 для удобства процедуру добавления из лист бокса добавлю позже. Путь просматриваю в ShowMessage для удобства,потому как не могу скопировать что либо с русскими путями.
manas_anarov
новенький
 
Сообщения: 26
Зарегистрирован: 13.12.2013 20:56:59

Re: Не могу скопировать файлы с русскими путями

Сообщение Лекс Айрин » 23.12.2013 22:29:25

manas_anarov, постой... в ShowMessage (как и в edit-ах) должна быть utf8 кодировка, а при сохранении, как показала практика, --ansi. конечно же у Вас ничего не получится. В ShowMessage и будут вопросы. Не зря же я выложил всю процедуру, включая вывод в заголовок.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Не могу скопировать файлы с русскими путями

Сообщение resident » 24.12.2013 00:19:07

manas_anarov писал(а):VirtUX Все равно не копирует, я сделал как вы посоветовали, процедура ShowMessage(nachalniy_fail) так как и прежде показывает вопросики

Чтоб ShowMessage показывал вопросики, беря из Edita через строковую переменную? :D
Такого не может быть, у вас что-то с Лазарусом или Виндой. Какие версии, откуда качали?
Взял ваш код - всё показывает нормально, файл копируется.

Добавлено спустя 16 минут 6 секунд:
Лекс Айрин писал(а):в ShowMessage (как и в edit-ах) должна быть utf8 кодировка
....
конечно же у Вас ничего не получится. В ShowMessage и будут вопросы

С чего бы там будут вопросы? Кодировка совпадает.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Не могу скопировать файлы с русскими путями

Сообщение Лекс Айрин » 24.12.2013 01:54:37

resident, ...собственно, мы говорим об одном и том же. Прочитайте внимательнее.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Не могу скопировать файлы с русскими путями

Сообщение VirtUX » 24.12.2013 01:57:42

manas_anarov писал(а):пока я сам набираю вручную значения Edit2 и Edit1

Значит в переменную попадает в UTF8, т.к. (если версия Lazarus не сильно старая) в Лазаре все в UTF8. Теперь, чтоб копировалось - нужно имя файла вместе с путем перекодировать в системную кодировку. Для разных версий Windows (как и разных Linux) кодировка может отличаться. Лично я с такими проблемами не сталкиваюсь и никогда не сталкивался, т.к. все в латинице и ничего кроме UTF8 не использую. Но кросс-решение, вероятно, в UTF8ToSys и обратном SysToUTF8.
Возможно не копируется не только из-за кодировки..... Увидеть бы весь код. И знать бы на чем Вы проводите эксперименты (версии Lazarus и ОС).
Аватара пользователя
VirtUX
энтузиаст
 
Сообщения: 880
Зарегистрирован: 05.02.2008 10:52:19
Откуда: Крым, Алушта

Re: Не могу скопировать файлы с русскими путями

Сообщение resident » 24.12.2013 03:48:41

Лекс Айрин писал(а): мы говорим об одном и том же. Прочитайте внимательнее.

Читаю:
Лекс Айрин писал(а):В ShowMessage и будут вопросы.

В ShowMessage вопросов нет и не будет в моей версии Лазаруса, т.к. кодировка везде совпадает.
Лекс Айрин писал(а):а при сохранении, как показала практика, --ansi

Функция CopyFile работает с кодировкой UTF в моей версии Лазаруса, никакие ANSI в данном случае не нужны.
Не знаю чем Вы там с топикстартером пользуетесь, но у меня его код работает отлично.

VirtUX писал(а):Возможно не копируется не только из-за кодировки..... Увидеть бы весь код.

Так весь код в первом сообщении :)
Вот я еще небольшую подготовку сделал - при создании формы создал собственно саму папку и файл с кириллицей в названиях, см. прикрепленный проект
У вас нет необходимых прав для просмотра вложений в этом сообщении.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Не могу скопировать файлы с русскими путями

Сообщение manas_anarov » 27.12.2013 19:40:58

VirtUX писал(а):Увидеть бы весь код. И знать бы на чем Вы проводите эксперименты (версии Lazarus и ОС).

Почти весь мой основной код, в моем вопросе, это форма с одной кнопкой ничего сложного.
У меня Win 7 Enterprise(x86),
Лазарус версия #1.0
дата 2012-08-28
версия FPC 2.6.0
Ревизия SVN 384115

Добавлено спустя 12 минут 38 секунд:
resident
1. Ваш исходник подходит в основном для текстовых файлов да?
2. А что будет если мне нада скопировать форматы .lnk .exe .inf, для этого я должен буду подсоединиться к файлу(nachalniy_fail) прочитать весь текст до конца присвоить полученный результат к (txt_nachalniy_fail) и сделать так
sl.Add(txt_nachalniy_fail);
sl.SaveToFile(UTF8ToAnsi(Edit1.Text));
да?
3. Или есть иные пути копирования не текстовых файлов ?
manas_anarov
новенький
 
Сообщения: 26
Зарегистрирован: 13.12.2013 20:56:59

Re: Не могу скопировать файлы с русскими путями

Сообщение resident » 27.12.2013 20:12:06

manas_anarov писал(а):1. Ваш исходник подходит в основном для текстовых файлов да?

Не мой исходник, а Ваш. Я ваш не изменял вообще, и копирует файлы ваш исходник. Любые. :)
Копирует вот эта ваша строчка:
CopyFile(nachalniy_fail,konechniy_fail,perezapis);

з.ы. Всё что было моего в создании формы к вашему вопросу отношения не имеет. Это подготовка к вашему исходнику.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Не могу скопировать файлы с русскими путями

Сообщение manas_anarov » 27.12.2013 23:05:57

resident
Я пробовал скопировать вот так
nachalniy_fail := UTF8ToSys(Edit2.Text);
konechniy_fail:=UTF8ToSys(Edit3.Text);
Если название файла на английском копирует без проблем.
Как только название файла на русском не копирует.
manas_anarov
новенький
 
Сообщения: 26
Зарегистрирован: 13.12.2013 20:56:59

Re: Не могу скопировать файлы с русскими путями

Сообщение resident » 28.12.2013 12:26:52

manas_anarov писал(а):Я пробовал скопировать вот так

Не знаю, зачем Вы еще чего-то пробуете.
У меня Ваш код из первого поста полностью работает. Я даже сделал пример (с русскими названиями), чтобы все убедились. Ну не буду же я еще видео записывать, чтобы доказать это :)
Если мой пример у Вас не работает, то я уже вам не могу подсказать ошибку. Вопрос уже не ко мне, а к создателям ваших версий Windows & Lazarus.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 217

Рейтинг@Mail.ru
cron