Russian Qt Forum

Qt => Общие вопросы => Тема начата: deMax от Июль 06, 2018, 15:34



Название: Проверка корректности пути к файлу
Отправлено: deMax от Июль 06, 2018, 15:34
Понятно что вопрос весьма не простой, но есть ли способ не сохраняя файл узнать можно ли его сохранить на данной фс. По началу устроит fat32, ext3/4.

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


Название: Re: Проверка корректности пути к файлу
Отправлено: deMax от Июль 06, 2018, 15:36
https://stackoverflow.com/questions/3038351/check-whether-a-string-is-a-valid-filename-with-qt

Может в Qt есть что то готовое? буст не подходит(да и не полный)


Название: Re: Проверка корректности пути к файлу
Отправлено: ViTech от Июль 06, 2018, 16:36
В С++17 есть Filesystem library (https://en.cppreference.com/w/cpp/filesystem), из буста взятая. Может там что-то полезное есть. std::filesystem::path::native (https://en.cppreference.com/w/cpp/filesystem/path/native) или ещё что.


Название: Re: Проверка корректности пути к файлу
Отправлено: lit-uriy от Июль 09, 2018, 10:00
По-моему самый простой способ это создать файл и посмотреть, не произойдёт ли при этом ошибки.


Название: Re: Проверка корректности пути к файлу
Отправлено: deMax от Июль 09, 2018, 17:04
То что простой, не спорю. Только пока юзверь имя файла напишет, много файлов создастся. А если папка только на запись и удаление запрещенно? А путь как проверить? Особенно /dev/null - этак можно и в системе что нибудь сломать.


Название: Re: Проверка корректности пути к файлу
Отправлено: vic57 от Июль 10, 2018, 18:10
То что простой, не спорю. Только пока юзверь имя файла напишет, много файлов создастся. А если папка только на запись и удаление запрещенно? А путь как проверить? Особенно /dev/null - этак можно и в системе что нибудь сломать.
а что за права такие - писать можно, а удалять нельзя?
если я открою файл на запись и закрою его, файл обнулится.
Код
C++ (Qt)
QFile f("/home/user/file.txt")
if (!open(f,QIODevice::WriteOnly)) {
qDebug() << "error open file"
}
 
чем не подходит?


Название: Re: Проверка корректности пути к файлу
Отправлено: qate от Июль 10, 2018, 22:10
Понятно что вопрос весьма не простой, но есть ли способ не сохраняя файл узнать можно ли его сохранить на данной фс. По началу устроит fat32, ext3/4.

а в чем смысл не сказать пользователю о сбое сохранения ?

а если нельзя создать - как предполагается сказать ? задизаблить кнопку save ?


Название: Re: Проверка корректности пути к файлу
Отправлено: deMax от Июль 11, 2018, 14:13
да, в диалоге выбора файла для сохранения блокировать кнопку save.
Соответственно постоянно создавать файлы пока пользователь пишет не очень красиво. Ну и если на папке стоит запрет на удаление, будет весело.


Название: Re: Проверка корректности пути к файлу
Отправлено: qate от Июль 11, 2018, 18:46
да, в диалоге выбора файла для сохранения блокировать кнопку save.

имхо задизабленная save вызовет недоумение типа "чтозанах"
а сообщение об ошибке - вполне нормально
да и обычно нет ошибок, ведь сохранение идет в домашний каталог пользователя
а проверять возможность может и не дать точный результат - права, имена и т.п.
я бы не стал разработывать и тестировать такой функционал без сильной необходимости


Название: Re: Проверка корректности пути к файлу
Отправлено: Igors от Июль 13, 2018, 03:21
да, в диалоге выбора файла для сохранения блокировать кнопку save.
Соответственно постоянно создавать файлы пока пользователь пишет не очень красиво. Ну и если на папке стоит запрет на удаление, будет весело.
Не берите дурного в голову и тяжелого в руки. Ото есть системный файловый диалог, вот он пусть и занимается многочисленными правами и.т.п. А приложение должно просто писать "куда скажут" и сообщать о случившейся ошибке.  Остальное - надумано


Название: Re: Проверка корректности пути к файлу
Отправлено: deMax от Июль 13, 2018, 08:57
Не берите дурного в голову и тяжелого в руки. Ото есть системный файловый диалог, вот он пусть и занимается многочисленными правами и.т.п. А приложение должно просто писать "куда скажут" и сообщать о случившейся ошибке.  Остальное - надумано
Стандартный диалог позволяет сохранять файлы с именем <>\:"|?* , а я блокирую кнопку save и вывожу причину через QTooltip.
Пока обрубил все что не A-Z|a-z|0-9|,._- и CON, PRN, AUX, NUL, COM0, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT0, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, LPT9


Название: Re: Проверка корректности пути к файлу
Отправлено: deMax от Июль 13, 2018, 15:08
Как изменить базовое имя файла? Может есть что то типа QFileInfo::setBaseName? Или только способ ниже?
Код:
    QFileInfo fileInfo(file);
    QString newBaseName = zzz(fileInfo.baseName());
    return fileInfo.path() + (fileInfo.path().isEmpty()? "": "/") + newBaseName + (fileInfo.completeSuffix().isEmpty()? "": ".") + fileInfo.completeSuffix();

есть конечно const char *basename (const char *__filename) , но char*