четверг, 27 марта 2008 г.

GetForbiddenChars() -> ReplaceForbiddenCharsInFileName()

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

wxFileName::GetForbiddenChars() есть, а обработать имя нечем. Написал свою.

/*static*/

wxString & BegUtils::ReplaceForbiddenCharsInFileName(wxString & name, const wxString ch/*=wxT("_")*/)

{

    wxString forbidden = wxFileName::GetForbiddenChars();

    int size=forbidden.Length();

    for (int i=0; i<size; ++i)

          name.Replace( wxString(forbidden[i]), ch,

true);

   return name;

}

 

P.S. Кстати если в диалоге выбора папки - выбрать что-нибудь типа Мой Компьюте или Сетевое Окружение и нажать ОК, то диалог ввернет wxID_CANCEL. Он то вроде и правильно, нельзя же в эти папки писать - но пользователь может и не понять. Под MFC возращает id_ok и кривой путь, в результате получается запись в корень с:

1 комментарий:

Анонимный комментирует...

Добавление
http://wxwidgets-rus.blogspot.com/2008/05/replaceforbiddencharsinfilename.html