虚拟机和内存访问问题

时间:2013-01-28 09:38:43

标签: c++ qt memory virtual-machine

我正在尝试观看目录并通知文件更改(创建),我在Windows 7和Ubuntu 12.04上使用虚拟机(VirtualBox)作为来宾,当一个文件被添加到我的监视文件夹中时测试这个文件的存在以获取它的大小并稍后操作它,问题是:有时它返回0作为大小虽然文件存在并且非零大小,这是我的代码:

void Watcher::OnFileChanged (char* FileBaseName)
{

    QDir watchDir(RootToWatch);
    QString fileN="";
    fileN=QString::fromLocal8Bit(FileBaseName);
    QFileInfo file(RootToWatch+"/"+fileN);
    qDebug()<<"Watcher::OnFileChanged "<<fileN;

    try
       {
       if(file.exists())
       {
           qDebug()<<"FileWatcher::OnFileChanged "<<fileN<<"exists";
           qDebug()<<"OnFileChanged:fileName "<<file.fileName()
                   <<"\nOnFileChanged File().size"<<QFile(fileN).size()
                   <<"\nOnFileChanged QFileInfo Size:"<<file.size();
 ....
       }
       }
}

我应该等待一段时间才能获得真正的大小(如果是,匹配以及如何准备好读取文件的测试方式)或者我是否错过了一些东西。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

这听起来像是“观察者在文件最终被写入之前关闭”的典型案例 - 这实际上是完全可以预期的行为,因为您可以说“告诉我这个文件是否已经改变” - 大小为零绝对是一种变化 - 无论是以前存在还是刚刚存在,它都是对以前的状态的改变。

在这种情况下,我的方法是再次设置手表,并查看文件下次是否“增长”。