• 5680阅读
  • 3回复

请教QFileInfo的path() [复制链接]

上一主题 下一主题
离线tyc611
 
只看楼主 倒序阅读 楼主  发表于: 2010-03-27
环境:Windows XP + Qt 4.6
在使用QFileInfo::path()这个函数时发现,如果用于构造QFileInfo对象的文件在根目录下,那么得到的路径最后有斜杠,而如果不在根目录则没有斜杠。
举例说明如下:

case 1:
  1. QFileInfo a("D:\test.txt");
  2. QString path = a.path();   // path == "D:/"
  3. bool root = a.isRoot();    // root == false


case 2:
  1. QFileInfo b("D:\tmp\test.txt");
  2. QString path = b.path();  // path == "D:/tmp"


QFileInfo的Doc里并没有清晰指出这一点,这使得如下代码无法正确工作
  1. QString newFile = QFileInfo(oldFile).path() + QDir::separator() + "newName.txt";   // buggy


不知道大家怎么看待此问题的?

另外QFileInfo::isRoot()函数在什么情况下会返回true?

thanks

离线yangfanxing
只看该作者 1楼 发表于: 2010-03-27
QFileInfo(oldFile).path() + "\\"+ "newName.txt";  

root不是C或home之类的吗?
PHPWind好恶心。。。不想看这种界面。。。
离线tyc611
只看该作者 2楼 发表于: 2010-03-27
引用第1楼yangfanxing于2010-03-27 19:31发表的  :
QFileInfo(oldFile).path() + "\"+ "newName.txt";  
root不是C或home之类的吗?


1. 下面的代码
  1. QFileInfo(“d:\\test.txt).path() + "\\"+ "new.txt";  

的结果是
  1. d:/\new.txt


2.我刚做了些测试,原来QFileInfo::isRoot()是把传入的整个字符串当作目录进行判断,而不是先把文件去掉
  1. bool tmp = QFileInfo("d").isRoot();   // false
  2. tmp = QFileInfo("d:").isRoot();           // false
  3. tmp = QFileInfo("d:/").isRoot();          // true
  4. tmp = QFileInfo("d:\\").isRoot();         // true
离线yangfanxing
只看该作者 3楼 发表于: 2010-03-27
  
QFileInfo(d:\\test.txt).path() + "\\"+ "new.txt";  

QFileInfo(“d:\\test.txt).path() + "/"+ "new.txt";  
好像偶一直这样写的。
写错了可能。多试试呗,总有可行的。
PHPWind好恶心。。。不想看这种界面。。。
快速回复
限100 字节
 
上一个 下一个