Qt4 为什么我的程序无法访问它所需的文件?
我已经为运行在Linux上的嵌入式设备编写了一个使用Qt库的程序。为了启动我的程序,我创建了一个名为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/" ]
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()
而且它工作了,但是通过将您所说的添加到脚本中,我的程序可以访问这些文件,而无需更改代码。谢谢