• 7861阅读
  • 8回复

[提问]请教QDir将目录名转换成小写的问题 [复制链接]

上一主题 下一主题
离线tyt2008cn
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-22
我需要将目录名转换成小写, 但是总是失败, 代码如下,请各位指点下啊
QString strDirPath = QString("%1").arg("D:/TestDirectory");
QString strDirPathLower = strDirPath.toLower();

QDir dir(strDirPath);
if (dir.exists())
{
   bool bSucc = dir.rename(strDirPath, strDirPathLower);
}
==这样是失败的,

改成下面这样,也是失败:
QString strDirPath = QString("%1").arg("D:/TestDirectory");
QDir dir(strDirPath);
if (dir.exists())
{
  QString strDirName = dir.dirName();
  QString strDirNameLower = strDirName.toLower();
   bool bSucc = dir.rename(strDirName , strDirNameLower );
}

离线dbzhang800

只看该作者 1楼 发表于: 2011-04-22
QDir::rename 调用的是 QFile::rename

看后者的 Manual 你会得到它不工作的原因。
离线tyt2008cn
只看该作者 2楼 发表于: 2011-04-22
QDir::rename调用的是 QFile::rename?
但是QFile::rename失败原因,有明确指出的是,已经存在文件名了,
但是我确认不存在 我要转换的目录名称啊
离线tyt2008cn
只看该作者 3楼 发表于: 2011-04-22
求指点,求高僧指点
离线dbzhang800

只看该作者 4楼 发表于: 2011-04-22
1. Windows 路径不区分大小写
2. "文件"和"目录" 说到底没有区别(如果你熟悉windows系统api,应该了解读写文件和目录都是用 CreateFile)
3.因为"新目录"已经存在,所以rename拒绝工作

题外,给你段代码,免得认为我一直胡说:
bool QDir::rename(const QString &oldName, const QString &newName)
{
...
    QFile file(filePath(oldName));
    if (!file.exists())
        return false;
    return file.rename(filePath(newName));
}
离线tyt2008cn
只看该作者 5楼 发表于: 2011-04-22
@dbzhang800 , 多谢回复哈, 我没有那个意思,
是我没搞懂错在哪里,

1. Windows 路径不区分大小写
==这么说的话,我能把一个目录名转换成小写么,比如 D:/TestDir,我想把它转换成 D:/testDir
要怎么写代码?
离线hessian
只看该作者 6楼 发表于: 2011-04-22
引用第5楼tyt2008cn于2011-04-22 12:44发表的  :
@dbzhang800 , 多谢回复哈, 我没有那个意思,
是我没搞懂错在哪里,
1. Windows 路径不区分大小写
==这么说的话,我能把一个目录名转换成小写么,比如 D:/TestDir,我想把它转换成 D:/testDir
.......


因为windows不区分大小写,所以 D:/TestDir 和 D:/testDir 在windows看来是一个目录,所以你可以先改成一个临时的名字再改回来,否则windows始终会认为是已存在相同目录的。明白?
我的新浪微博:http://weibo.com/sseh
离线dbzhang800

只看该作者 7楼 发表于: 2011-04-22
引用第5楼tyt2008cn于2011-04-22 12:44发表的  :
@dbzhang800 , 多谢回复哈, 我没有那个意思,
是我没搞懂错在哪里,
1. Windows 路径不区分大小写
==这么说的话,我能把一个目录名转换成小写么,比如 D:/TestDir,我想把它转换成 D:/testDir
.......

1. 你可以考虑改成其他名字,再改回来。

2. 你可以去查api,比如MoveFileEx(我对api不熟,不保证这个可以实现你要的操作,反正Qt目前调用的MoveFile是肯定不行的)
http://msdn.microsoft.com/en-us/library/aa364232%28v=VS.85%29.aspx
离线tyt2008cn
只看该作者 8楼 发表于: 2011-04-22
丫,明白了,多谢 dbzhang800  和 hessian 的耐心指点,呵呵
快速回复
限100 字节
 
上一个 下一个