Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];

Вниз

Не воспринимается путь к файлу кирилицей   Найти похожие ветки 

 
Laguna ©   (2011-10-12 11:59) [0]

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

 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;

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


 
Омлет ©   (2011-10-12 12:08) [1]

Дело не в кириллице.
"C:\Новая папка\Картинки\"C:\Новая папка\Картинки\Img111.bmp"" - путь кривой.


 
Laguna ©   (2011-10-12 12:12) [2]

Такой путь формируется для вывода ошибки на экран(ИМХО). А по коду ведь все просто - полю таблицы присваивается файл, находящийся по пути FilenameEdit1.Text. Почему же тогда путь из латинских букв принимает нормально?


 
Laguna ©   (2011-10-12 12:17) [3]

Вроде разобрался. Кирилица действительно ни при чем. Ошибка появляется, если в пути наименования папок с пробелами. Это не излечимо? Конечно можно взять за правило не загружать картинки из таких папок, но всетаки интересно.


 
RWolf ©   (2011-10-12 12:17) [4]

В Builder"е слэши в строковых литералах нужно удваивать.
FilenameEdit1.Text = "c:\\Новая папка\\Картинки\\Img111.bmp"


 
Медвежонок Пятачок ©   (2011-10-12 12:18) [5]

Такой путь видит дебуггер. Это реальный путь с которым ты пытаешься работать


 
RWolf ©   (2011-10-12 12:19) [6]

впрочем, торможу — это не Builder же.
никаких проблем быть не должно в принципе.


 
Медвежонок Пятачок ©   (2011-10-12 12:21) [7]

Это не излечимо?

Излечимо.
Но надо уметь работать со строками.


 
OW ©   (2011-10-12 12:22) [8]

"" обрамить?


 
Омлет ©   (2011-10-12 12:23) [9]

> Laguna ©   (12.10.11 12:17) [3]
> Кирилица действительно ни при чем. Ошибка появляется, если в пути наименования папок с пробелами.


И пробелы ни при чем. Говорят же - неверно формируется строка пути до файла. В FotoTblDomFoto1.LoadFromFile или раньше. Ошибка у тебя в программе.


 
Laguna ©   (2011-10-12 12:30) [10]

Не знаю что значит Но надо уметь работать со строками., если передаются стандартные параметры для компонентов. А вот убрал пробелы и с кирилицей путь берется нормально.


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

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

Там все сложнее.
Если файл в латинице, но на картинке есть русские буквы, то тоже будет глючить.


 
Laguna ©   (2011-10-12 12:42) [12]


> Если файл в латинице, но на картинке есть русские буквы,
>  то тоже будет глючить.

Глубокая мысль

procedure TBlobField.LoadFromFile(const FileName: string);
var
 Stream: TStream;
begin
 Stream := TFileStream.Create(FileName, fmOpenRead);  //<-- Здесь ошибка/B>
 try
   LoadFromStream(Stream);
 finally
   Stream.Free;
 end;
end;


 
Dimka Maslov ©   (2011-10-12 12:44) [13]

В кириллическом варианте буква с что из себя представляет? Не кириллическая ли она? В моей практике подобные случаи бывали.


 
Юрий Зотов ©   (2011-10-12 12:51) [14]

> Laguna

Если полное (с путем) имя файла содержит пробелы, то оно должно быть заключено в кавычки.


 
Laguna ©   (2011-10-12 12:57) [15]

Исключено, ввод не вручную, а выбором самого FilenameEdit1 через стандартное диалоговое окно. Да я говорю что дело в пробелах, правда не могу объяснить почему так получается и где рыть.


 
Медвежонок Пятачок ©   (2011-10-12 12:58) [16]

Сохраняя в базе картинку выполняю следующее:
FotoTblDomFoto1.LoadFromFile(FilenameEdit1.Text)
где  для примера
FilenameEdit1.Text = "c:\Новая папка\Картинки\Img111.bmp"


вот что бывает, когда не слышал про опенфайл диалог.


 
Омлет ©   (2011-10-12 12:58) [17]

> Юрий Зотов ©   (12.10.11 12:51) [14]
> Если полное (с путем) имя файла содержит пробелы, то оно должно быть заключено в кавычки.


В какие кавычки?
Вот этот код прекрасно работает:


 bmp := TBitmap.Create;
 bmp.LoadFromFile("C:\а б.bmp");

Кавычки тут только для компилятора.


 
Медвежонок Пятачок ©   (2011-10-12 12:59) [18]

FilenameEdit1.Text

Текст-то у него конечно есть.
Но подозреваю, что это только унаследованное и для косметики.
А правильное имя файла лежит совсем в другом свойстве.


 
Омлет ©   (2011-10-12 12:59) [19]

> Laguna ©   (12.10.11 12:57) [15]

Код покажи уже. Сколько можно партизанить.


 
Laguna ©   (2011-10-12 13:01) [20]

>Юрий Зотов

> Если полное (с путем) имя файла содержит пробелы, то оно
> должно быть заключено в кавычки.


Нет, проверил, не помогло
FotoTblDomFoto1.LoadFromFile("""+ FilenameEdit1.Text + """)


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

Нет, проверил, не помогло
FotoTblDomFoto1.LoadFromFile("""+ FilenameEdit1.Text + """)


//FotoTblDomFoto1.LoadFromFile("""+ FilenameEdit1.Text + """)
ShowMessage(FilenameEdit1.Text);


 
Laguna ©   (2011-10-12 13:05) [22]

> Омлет

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

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


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

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

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


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

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

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


 
Laguna ©   (2011-10-12 13:10) [25]

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


> ShowMessage(FilenameEdit1.Text);


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


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

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


 
Laguna ©   (2011-10-12 13:16) [27]

> Омлет

> 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:19) [28]

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


 
RWolf ©   (2011-10-12 13:20) [29]


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

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


 
Dimka Maslov ©   (2011-10-12 13:24) [30]

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


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

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

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


 
Laguna ©   (2011-10-12 13:33) [32]

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

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


 
Laguna ©   (2011-10-12 13:35) [33]

> Омлет

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


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

FilenameEdit1: TFilenameEdit;


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

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

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


 
Laguna ©   (2011-10-12 13:41) [35]

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

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

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


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

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

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


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


 
OW ©   (2011-10-12 13:45) [37]

TFilenameEdit - что это?

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


 
Laguna ©   (2011-10-12 13:52) [38]

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

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

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


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

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


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

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

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

вот он:

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

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

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


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


 
Dennis I. Komarov ©   (2011-10-12 14:06) [40]


> TFilenameEdit - что это?

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



Страницы: 1 2 вся ветка

Форум: "Начинающим";
Текущий архив: 2012.01.29;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.003 c
15-1318097571
Born Loser
2011-10-08 22:12
2012.01.29
Как передать данные из драйвера


15-1317933002
Юрий
2011-10-07 00:30
2012.01.29
С днем рождения ! 7 октября 2011 пятница


15-1318409914
Псарь
2011-10-12 12:58
2012.01.29
Нужен исходник AS3...


8-1222045702
Dispoz
2008-09-22 05:08
2012.01.29
Попытка загрузить картинку


15-1318309652
И. Павел
2011-10-11 09:07
2012.01.29
Good bye sweet VCL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский