我需要监视一个文件系统,我有一个函数可以递归浏览文件夹和文件,并将它们的路径添加到我的QFileSystemWatcher中:
void watchFileSystem(const QDir& dir, QFileSystemWatcher& watcher)
{
watcher.addPath(dir.absolutePath());
QDirIterator iterator(dir.absolutePath(), QDirIterator::Subdirectories);
while (iterator.hasNext()) {
QString foldername = QString(iterator.fileName());
if (foldername != "." && foldername != ".." && foldername != "")
watcher.addPath(iterator.filePath());
iterator.next();
if (!iterator.fileInfo().isDir()) {
watcher.addPath(iterator.filePath());
}
}
}在运行时,每个“watcher.addPath(iterator.filePath())”在控制台中都有以下错误消息:
QFileSystemWatcher:添加路径失败:C:/./anyfile.ext
最奇怪的是它还是起作用了。当我重命名/编辑文件或文件夹时,将触发fileChanged和folderChanged事件。
有人知道发生了什么吗?我担心我的程序不稳定,这个错误不能毫无意义地显示出来。
感谢你的阅读和帮助,
拉斐尔。
发布于 2012-09-27 07:47:00
之所以显示警告,是因为您的循环添加了两次文件:
在循环的中间,您可以执行iterator.next();。如果这将迭代器移动到一个文件中,那么它将在下一个If语句中添加。现在循环继续进行,但仍然指向同一个文件。如果这个名字不是".","..“或者"“,即不是在文件的情况下,相同的文件将再次添加。
我重组了你的循环让它运转起来:
while (iterator.hasNext())
{
QString fileOrFolderName = QString(iterator.fileName());
// Skip non-folders
if (fileOrFolderName == "." || fileOrFolderName == ".." ||
fileOrFolderName == "")
{
iterator.next();
continue;
}
// Add the folder or file
watcher.addPath(iterator.filePath());
iterator.next();
}这将添加提供给函数的目录下的所有文件夹和文件。
https://stackoverflow.com/questions/12612231
复制相似问题