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

Вниз

Недопустимые символы в названии файла   Найти похожие ветки 

 
Омлет ©   (2011-05-18 13:39) [0]

Вероятно, это давно известная проблема со стандартным диалогом, но я только сейчас напоролся:

procedure TForm1.btnSaveClick(Sender: TObject);
begin
 dlgSave.FileName := edtProjectName.Text;
 if dlgSave.Execute then
 begin
   // save project
 end;
end;


Если в edtProjectName ввести недопустимый в имени файла символ, то диалог просто не появится, без каких-либо сообщений об ошибках.
И вот попробуй, догадайся, в чем же проблема, когда пользователь из другого города звонит и говорит, что иногда не срабатывает кнопка сохранения...
Это, как минимум, в D5/D7 + XP/7.

P.S.
fail_chars = ["<", ">", "?", "|", ":", "*", "/", "\", """]


 
Leon-Z ©   (2011-05-18 14:03) [1]


try
 if dlgSave.Execute then
 begin
   ...
 end;
except
 // научитесь давать правильные имена файлам
end;


 
Dennis I. Komarov ©   (2011-05-18 14:03) [2]

т.е. dlgSave.Execute возвращает true?


 
Dennis I. Komarov ©   (2011-05-18 14:06) [3]


> Leon-Z ©   (18.05.11 14:03) [1]

дык

> то диалог просто не появится, без каких-либо сообщений об
> ошибках.

т.е. я понял что нет эксепшена...

Логично предположить что должен вернуть false, а далее GetLastError или подобное...


 
И. Павел ©   (2011-05-18 14:15) [4]

Это что за штука? Может как раз тут и должно было фикситься, да забыли? :) (Delphi 7, Dialogs.pas)
function FixFileName(const FileName: string): string;
begin
 Result := FileName;
end;


 
И. Павел ©   (2011-05-18 14:17) [5]

> [4] И. Павел ©   (18.05.11 14:15)

Извиняюсь, недоглядел. Это для совместимости с линуксом.


 
Омлет ©   (2011-05-18 15:10) [6]

> Leon-Z ©   (18.05.11 14:03) [1]

Execute возвращает false, как если бы диалог был показан, а пользователь нажал "Отмена". Никаких ошибок ни Windows, ни Delphi не генерируют.


 
Юрий Зотов ©   (2011-05-18 15:46) [7]

Решение "в лоб":

const
 Fail_Chars = ["<", ">", "?", "|", ":", "*", "/", "\", """];

procedure TForm1.btnSaveClick(Sender: TObject);
var
 i: integer;
begin
 for i := 1 to Length(edtProjectName.Text) do
   if edtProjectName.Text[i] in Fail_Chars then
     raise EMyException.Create
       ("В имени файла недопустимый символ " + edtProjectName.Text[i]);
 dlgSave.FileName := edtProjectName.Text;
if dlgSave.Execute then
begin
  // save project
end;
end;


 
Омлет ©   (2011-05-18 15:53) [8]

> Юрий Зотов ©   (18.05.11 15:46) [7]

Решить-то не проблема, когда знаешь причину. А вот найти её, да руками сильно удаленного пользователя - весёленькое занятие.
И подобное, думаю, лучше вообще перенести в сеттер свойства FileName для TOpenDialog.


 
Медвежонок Пятачок ©   (2011-05-18 16:11) [9]

а если файл создается на томе новелла 3.12?
приведенное fail_chars будет слишком коротким


 
Игорь Шевченко ©   (2011-05-18 16:34) [10]

Юрий Зотов ©   (18.05.11 15:46) [7]

LastDelimiter проще


 
SergeyIT ©   (2011-05-18 18:16) [11]

> Омлет ©
Когда работаешь с файловой и т.п. системами всегда предохраняться надо...



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

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

Наверх





Память: 0.47 MB
Время: 0.004 c
3-1263807978
miau
2010-01-18 12:46
2011.09.04
Не желает выполнятся запрос через Query


15-1305711559
Омлет
2011-05-18 13:39
2011.09.04
Недопустимые символы в названии файла


15-1304775180
картман
2011-05-07 17:33
2011.09.04
сегодня у друга менял мозги


15-1305098229
young_dev
2011-05-11 11:17
2011.09.04
обращение к объекту


3-1263635532
victor
2010-01-16 12:52
2011.09.04
обновление данных в ADODataSet





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский