Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не воспринимается путь к файлу кирилицей [D7, XP]


Страницы:   1 2 3 4

Laguna ©   (2011-10-12 11:59:00) 

Сохраняя в базе картинку выполняю следующее:

 FotoTblDomFoto1.LoadFromFile(FilenameEdit1.Text)
,
где  для примера
FilenameEdit1.Text = "c:\Новая папка\Картинки\Img111.bmp"

вылетает вот эта ошибка http://s017.radikal.ru/i419/1110/be/3a63b68395b6.jpg
Отслеживая по коду обнаружил, что появляется она в момент отработки TFileStream.

constructor TFileStream.Create(const FileName: string; Mode: Word; Rights: Cardinal);
begin
 if Mode = fmCreate then
 begin
   inherited Create(FileCreate(FileName, Rights));
   if FHandle < 0 then
     raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
 end
 else
 begin
   inherited Create(FileOpen(FileName, Mode));
   if FHandle < 0 then
     raise EFOpenError.CreateResFmt(@SFOpenErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);
 end;
end;

Что же получается, загружать картинки можно только из папок, набранных латинскими буквами? Или есть какой обход данной ошибки?


RWolf   (2011-10-12 14:07:00) [21]


> После обеда сделаю функцию их убирать

AnsiDequotedStr


Dennis I. Komarov   (2011-10-12 14:06:00) [22]


> TFilenameEdit - что это?

Это стандартный компонент в D7, ты что не знал? Просто это у тебя дельфи не правильная :)
З.Ы.
 Понаставят тут всякое...


Медвежонок Пятачок   (2011-10-12 13:57:00) [23]

Ну не делал я экспандов, чесслово...

я и не говорил, что это ты.
я говорил, что
Экспанд сделан полному имени с путем.

вот он:

raise EFCreateError.CreateResFmt(@SFCreateErrorEx, [ExpandFileName(FileName), SysErrorMessage(GetLastError)]);

и он сделан ПОЛНОМУ ИМЕНИ ФАЙЛА С ПУТЕМ.

Получается, что имя файла без пути подставляется как полный путь. Странноо...


Не получается. И не странно.
В конструктор пришло полное имя с путем и с кавычками.


Laguna   (2011-10-12 13:52:00) [24]

Я кажется понял в чем дело. Более внимательная трассировка подталкнула.
http://i033.radikal.ru/1110/b4/74a5eac1222f.jpg
Обратите внимание сколько здесь кавычек - по 3 с каждой стороны. Вот здесь наверное собака и порылась.

Я передаю содержимое FilenameEdit1.Text как есть, а оно в свою очередь включает уже в себя обрамление из кавычек
http://s017.radikal.ru/i415/1110/fd/4a3c40530280.jpg

После обеда сделаю функцию их убирать и попробую что ролучится. Кажется в этом все дело...


> На скрине имя файла с полным путем в кавычках, и к нему
> применено ExpandFileName.

Ну не делал я экспандов, чесслово...


OW   (2011-10-12 13:45:00) [25]

TFilenameEdit - что это?

а нельзя просто как то
 if dlgOpen1.Execute then
 begin
   ProcessMe( dlgOpen1.FileName );
 end;


Медвежонок Пятачок   (2011-10-12 13:44:00) [26]

На скринеимя файла с полным путемв кавычках, и к нему применено ExpandFileName.

Получается, что имя файла без пути подставляется как полный путь. Странноо...


Не получается и не странно.
Экспанд сделан полному имени с путем.


Laguna   (2011-10-12 13:41:00) [27]

> Медвежонок Пятачок

> А кто сказал, что оно было без пути перед экспандом?(Зачем
> кстати экспанд? )

Да никаких экспандов я не делаю. Это еррора так формирует имя. Я просто передаю то, что находится в FilenameEdit1.Text и только.


Медвежонок Пятачок   (2011-10-12 13:37:00) [28]

Получается, что имя файла без пути подставляется как полный путь. Странноо...

А кто сказал, что оно было без пути перед экспандом?
(Зачем кстати экспанд? )


Laguna   (2011-10-12 13:35:00) [29]

> Омлет

> Вопрос был, какого типа FilenameEdit1, а не FilenameEdit1.Text.


Ну какого типа может быть стандартный компонент?

FilenameEdit1: TFilenameEdit;


Laguna   (2011-10-12 13:33:00) [30]

Я вот на что обратил внимание. Когда на экран выдается ошибка, то посмотрите внимательно на количество кавычек.
http://s012.radikal.ru/i320/1110/69/044fd7b0b99f.jpg
Получается, что имя файла без пути подставляется как полный путь. Странноо...

Касаемо параметра в создании потока, то вот
http://s017.radikal.ru/i426/1110/01/65d5e9a6bf69.jpg


Омлет   (2011-10-12 13:32:00) [31]

> Laguna ©   (12.10.11 13:16) [27]

1. Вопрос был, какого типа FilenameEdit1, а не FilenameEdit1.Text.
2. Думаю, всё-таки, TBlobField, а не BloobField.


Dimka Maslov   (2011-10-12 13:24:00) [32]

Делаем Use Debug DCUs, заходим отладчиков в TFileStream и смотрим, что именно передаётся как FileName


RWolf   (2011-10-12 13:20:00) [33]


> Laguna ©   (12.10.11 13:10) [25]
> > Медвежонок Пятачок > ShowMessage(FilenameEdit1.Text);
> И что?

то, что строка выводится в кавычках.
а LoadFromFile требует имя без кавычек.


Медвежонок Пятачок   (2011-10-12 13:19:00) [34]

маскедит для выборафайла?


Laguna   (2011-10-12 13:16:00) [35]

> Омлет

> FotoTblDomFoto1 - какого  типа?

BloobField

>FilenameEdit1 - какого типа?


type
 TMaskedText = type string;
 property Text: TMaskedText;



> И вообще, по-хорошему надо так:if OpenDialog1.Execute thenbegin
>  FotoTblDomFoto1.LoadFromFile(OpenDialog1.FileName);  FilenameEdit1.
> Text := OpenDialog1.FileName;end;


Так я ведь FilenameEdit1 использую для выбора файла, а не OpenDialog1


Медвежонок Пятачок   (2011-10-12 13:12:00) [36]

Теперь тоже самое, но в реальном своем конструкторе перед реальным открытием файла.


Laguna   (2011-10-12 13:10:00) [37]

> Медвежонок Пятачок


> ShowMessage(FilenameEdit1.Text);


И что?
http://s57.radikal.ru/i156/1110/2d/fb4549193e86.jpg


Омлет   (2011-10-12 13:08:00) [38]

И вообще, по-хорошему надо так:

if OpenDialog1.Execute then
begin
 FotoTblDomFoto1.LoadFromFile(OpenDialog1.FileName);
 FilenameEdit1.Text := OpenDialog1.FileName;
end;


Омлет   (2011-10-12 13:06:00) [39]

> Laguna ©   (12.10.11 13:05) [22]

FotoTblDomFoto1 - какого типа?
FilenameEdit1 - какого типа?


Laguna   (2011-10-12 13:05:00) [40]

> Омлет

Да весь код с возникающей ошибкой я уже выкладывал [0]
Ну вот чуть по другому, взял из проекта.

if FilenameEdit1.Text <> '' then
      FotoTblDomFoto1.LoadFromFile(FilenameEdit1.Text)
     else
      FotoTblDomFoto1.Clear;


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо