Форум: "Начинающим";
Текущий архив: 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