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;

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


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

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


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


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

>Юрий Зотов

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


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


Омлет   (2011-10-12 12:59:00) [43]

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

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


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

FilenameEdit1.Text

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


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

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


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


Омлет   (2011-10-12 12:58:00) [46]

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


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


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

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


Laguna   (2011-10-12 12:57:00) [47]

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


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

> Laguna

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


Dimka Maslov   (2011-10-12 12:44:00) [49]

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


Laguna   (2011-10-12 12:42:00) [50]


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

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

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


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

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

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


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

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


Омлет   (2011-10-12 12:23:00) [53]

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


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


OW   (2011-10-12 12:22:00) [54]

"" обрамить?


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

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

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


RWolf   (2011-10-12 12:19:00) [56]

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


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

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


RWolf   (2011-10-12 12:17:00) [58]

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


Laguna   (2011-10-12 12:17:00) [59]

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


Laguna   (2011-10-12 12:12:00) [60]

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


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

Наверх

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