![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не воспринимается путь к файлу кирилицей [D7, XP]
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;