Текущий архив: 2011.09.04;
Скачать: CL | DM;
Вниз
Недопустимые символы в названии файла Найти похожие ветки
← →
Омлет © (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;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.003 c