LINUX.ORG.RU

Непонятки c QFileInfo

 


0

1

Имеем Qt4.8.6 под линуксом. Запускаем такой код

QString str;
            str = "/tmp/myfolder/myfile.txt";
            qDebug() << QFileInfo(str).fileName();
            str = "tmp\\myfolder\\myfile.txt";
            qDebug() << QFileInfo(str).fileName();

fileName() должен выводить имя файла без его пути. Вот его вывод
"myfile.txt" 
"tmp\myfolder\myfile.txt" 

Т.е. виндовые пути обработаны неверно. Запускаем то же самое под виндой, все работает нормально.

"myfile.txt" 
"myfile.txt" 

Почему так происходит, и как еще можно получить имя файла без пути до него независимо от типа пути и платформы, где это все работает? В голову приходит только регулярка.

★★★★

Потому что под виной и те и те слеши являются валидными разделителями, а под онтопиком - нет

anonymous
()

tmp\\myfolder\\myfile.txt

Мало того, что виндовые разделители,так ещё и путь относительный. Ты уверен, что он существует в твоей рабочей директории?

XMs ★★★★★
()
Ответ на: комментарий от XMs

Для того чтобы из этой строки вычленить имя файла не бязательно, чтобы этот файл существовал.

WRG ★★★★
() автор топика
Ответ на: комментарий от alex_custov

только тут скорее надо fromNativeSeparators

anonymous
()

WRG дружище, не юзай \\ и будет тебе счастие. а если вдруг надо с внешней среды вендовой пути обработать то накатай функцию или воспользуйся уже готовой из Qt для преобразования в православный path delemiter «/»

MikeDM ★★★★★
()
Ответ на: комментарий от WRG

Видимо придется воспользоваться регуляркой.

Но зачем?! Просто используй везде нормальные разделители ('/') и всё будет ок, винда их понимает.

Stil ★★★★★
()
Ответ на: комментарий от MikeDM

Сам бы рад, но приходится. Строка, которую я формирую с \\ будет отправлена некоторому прибору, он только такие path delemiter понимает. Прибор изменять я не могу, приходится подстраиваться под него.

WRG ★★★★
() автор топика
Ответ на: комментарий от WRG

воспользоваться регуляркой

Зачем? Для вывода можно воспользоваться QDir::toNativeSeparators и fromNativeSeparators, а внутри программы использовать «/».

Suigintou ★★★★★
()
Ответ на: комментарий от XMs

Ты уверен, что он существует в твоей рабочей директории?

Большинство методов QFileInfo и QDir (те, которые не вносят изменений в ФС) не проверяют существование файла.

Suigintou ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.