Qt4 为什么我的程序无法访问它所需的文件?

Qt4 为什么我的程序无法访问它所需的文件?,qt4,startup,embedded-linux,qfile,Qt4,Startup,Embedded Linux,Qfile,我已经为运行在Linux上的嵌入式设备编写了一个使用Qt库的程序。为了启动我的程序,我创建了一个名为S80custom的脚本,并将其放在/etc/init.d/目录中。脚本的内容是: #!/bin/sh if [ ! -d "/root/files/" ]; then mkdir /root/files/ fi if [ ! -d "/root/Test/" ]; then mkdir /root/Test/ fi if [ ! -d "/root/Test/Log/" ]

我已经为运行在Linux上的嵌入式设备编写了一个使用Qt库的程序。为了启动我的程序,我创建了一个名为
S80custom
的脚本,并将其放在
/etc/init.d/
目录中。脚本的内容是:

#!/bin/sh

if [ ! -d "/root/files/" ]; then
    mkdir /root/files/
fi

if [ ! -d "/root/Test/" ]; then
    mkdir /root/Test/
fi

if [ ! -d "/root/Test/Log/" ]; then
    mkdir /root/Test/Log/
fi

export TSLIB_CONSOLEDEVICE='none'
export TSLIB_FBDEVICE='/dev/fb0'
export TSLIB_TSDEVICE='/dev/input/event1'
export TSLIB_PLUGINDIR='/usr/lib/ts'
export TSLIB_CONFFILE='/etc/ts.conf'
export TSLIB_CALIBFILE='/etc/pointercal'
export QWS_MOUSE_PROTO=tslib:'/dev/input/event1'

/root/Test/Test -qws
但是,当我的程序在系统启动时运行时,它无法访问位于
/root/files
的文件。我使用了
QFile
类及其成员函数。我已经尝试了标准C++库,它们工作,但是奇怪的QFrice无法打开文件,我必须使用qFrm来完成这个任务。p> 我做错了什么

这里我还应该提到,当我在登录后从命令提示符运行我的应用程序时,它工作得非常好

编辑
根据注释中的要求,这是假定打开文件的代码部分:

QDir directory = QDir::home();
if(!directory.cd("files")){
    LOG << directory << "does not exist or path incorrect. trying to make it";
    if(directory.mkdir("files"))
    {
        LOG << "made directory \"files\" at" << directory.absolutePath();
        directory.cd("files");
    }
    else
        LOG << "couldn't make diretory... do we have enough priviledges?";
}

fileName = directory.absoluteFilePath("PARMLIST.BIN");

qDebug() << "filename to open:" << fileName;


QFile file(fileName);
QDataStream in(&file);

if(!file.open(QIODevice::ReadOnly))
{
    if(CONF_INT("rdu.active") != 1)
        AlarmManager::getInstance().setAlarm(102, true);
    else
        AlarmManager::getInstance().setAlarm(184, true);
    paramMissing = true;

    return;
}
qdirectory=QDir::home();
如果(!directory.cd(“文件”)){

LOG我怀疑您的问题是由于缺少环境变量造成的

让我们从以下方面开始:

在非Windows操作系统下,主环境变量为 如果存在,则使用,否则使用rootPath()返回的路径

因此,如果您登录,您已经正确设置了HOME变量,并且该变量可以工作,但是当您从init启动程序时,您没有该变量

export HOME="/root"

对于您初始化脚本,我怀疑您的问题是由于缺少环境变量造成的

让我们从以下方面开始:

在非Windows操作系统下,主环境变量为 如果存在,则使用,否则使用rootPath()返回的路径

因此,如果您登录,您已经正确设置了HOME变量,并且该变量可以工作,但是当您从init启动程序时,您没有该变量

export HOME="/root"

对于你的初始化脚本

你需要添加一些关于你得到的错误的信息。我添加了部分代码。我没有通过内核或任何其他方式得到任何错误。只是因为某些原因我无法访问我的文件…你需要添加一些关于你得到的错误的信息。我添加了部分代码。我没有通过内核或任何其他方式得到任何错误只是因为某种原因,我无法访问我的文件……是的,你说得对……在我看到你的答案之前,我将我的
QDir目录=QDir::home();
更改为
QDir目录=QDir::root()
而且它工作了,但是通过将您所说的添加到脚本中,我的程序能够访问这些文件,而无需更改代码。谢谢您是对的……在我看到您的答案之前,我将我的
qdirectory=QDir::home();
更改为
qdirectory=QDir::root()
而且它工作了,但是通过将您所说的添加到脚本中,我的程序可以访问这些文件,而无需更改代码。谢谢