Russian Qt Forum
Июль 22, 2018, 02:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проверка корректности пути к файлу  (Прочитано 640 раз)
deMax
Программист
*****
Offline Offline

Сообщений: 571



Просмотр профиля
« : Июль 06, 2018, 15:34 »

Понятно что вопрос весьма не простой, но есть ли способ не сохраняя файл узнать можно ли его сохранить на данной фс. По началу устроит fat32, ext3/4.

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

Сообщений: 571



Просмотр профиля
« Ответ #1 : Июль 06, 2018, 15:36 »

https://stackoverflow.com/questions/3038351/check-whether-a-string-is-a-valid-filename-with-qt

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

Сообщений: 471



Просмотр профиля
« Ответ #2 : Июль 06, 2018, 16:36 »

В С++17 есть Filesystem library, из буста взятая. Может там что-то полезное есть. std::filesystem::path::native или ещё что.
Записан

Пока сам не сделаешь...
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3827


Просмотр профиля WWW
« Ответ #3 : Июль 09, 2018, 10:00 »

По-моему самый простой способ это создать файл и посмотреть, не произойдёт ли при этом ошибки.
Записан

Юра.
deMax
Программист
*****
Offline Offline

Сообщений: 571



Просмотр профиля
« Ответ #4 : Июль 09, 2018, 17:04 »

То что простой, не спорю. Только пока юзверь имя файла напишет, много файлов создастся. А если папка только на запись и удаление запрещенно? А путь как проверить? Особенно /dev/null - этак можно и в системе что нибудь сломать.
Записан
vic57
Чайник
*
Offline Offline

Сообщений: 77


Просмотр профиля
« Ответ #5 : Июль 10, 2018, 18:10 »

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

Сообщений: 876


Просмотр профиля
« Ответ #6 : Июль 10, 2018, 22:10 »

Понятно что вопрос весьма не простой, но есть ли способ не сохраняя файл узнать можно ли его сохранить на данной фс. По началу устроит fat32, ext3/4.

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

а если нельзя создать - как предполагается сказать ? задизаблить кнопку save ?
Записан
deMax
Программист
*****
Offline Offline

Сообщений: 571



Просмотр профиля
« Ответ #7 : Июль 11, 2018, 14:13 »

да, в диалоге выбора файла для сохранения блокировать кнопку save.
Соответственно постоянно создавать файлы пока пользователь пишет не очень красиво. Ну и если на папке стоит запрет на удаление, будет весело.
Записан
qate
Гипер активный житель
*****
Offline Offline

Сообщений: 876


Просмотр профиля
« Ответ #8 : Июль 11, 2018, 18:46 »

да, в диалоге выбора файла для сохранения блокировать кнопку save.

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

Сообщений: 10081


Просмотр профиля
« Ответ #9 : Июль 13, 2018, 03:21 »

да, в диалоге выбора файла для сохранения блокировать кнопку save.
Соответственно постоянно создавать файлы пока пользователь пишет не очень красиво. Ну и если на папке стоит запрет на удаление, будет весело.
Не берите дурного в голову и тяжелого в руки. Ото есть системный файловый диалог, вот он пусть и занимается многочисленными правами и.т.п. А приложение должно просто писать "куда скажут" и сообщать о случившейся ошибке.  Остальное - надумано
Записан
deMax
Программист
*****
Offline Offline

Сообщений: 571



Просмотр профиля
« Ответ #10 : Июль 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
Записан
deMax
Программист
*****
Offline Offline

Сообщений: 571



Просмотр профиля
« Ответ #11 : Июль 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*
« Последнее редактирование: Июль 13, 2018, 15:34 от deMax » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.071 секунд. Запросов: 23.