C++ Qt创建者。从文件中读取并打印在beaggleboard上
我正在使用Qt creator做一个项目。 我有3个屏幕,每个屏幕有4个按钮。单击第一个按钮时,它会将0写入文件(char),然后依次写入3。当我到达最后一个屏幕(4.screen)时,我将读取文件并显示按钮的输入,但不显示3个字符C++ Qt创建者。从文件中读取并打印在beaggleboard上,c++,linux,qt,beagleboard,unistd.h,C++,Linux,Qt,Beagleboard,Unistd.h,我正在使用Qt creator做一个项目。 我有3个屏幕,每个屏幕有4个按钮。单击第一个按钮时,它会将0写入文件(char),然后依次写入3。当我到达最后一个屏幕(4.screen)时,我将读取文件并显示按钮的输入,但不显示3个字符 void fileOperation::openFileWrite(char x, off_t s) { int fd; char c[2] = {x}; fd = open("/home/stud/txtFile", O_CREAT |
void fileOperation::openFileWrite(char x, off_t s)
{
int fd;
char c[2] = {x};
fd = open("/home/stud/txtFile", O_CREAT | O_WRONLY, 0666);//open file
if(fd == -1)
cout << "can't open file" << endl;
else
{
lseek(fd, s, SEEK_SET);//seek at first byte
write(fd, (void*)&c, 2);//write to file
}
//syncfs(fd);
::close(fd);
}
QString fileOperation::openFileRead()
{
int fd;
QString str;
char c[4];
fd = open("/home/stud/txtFile", O_RDWR);
lseek(fd, 0, SEEK_SET);
read(fd, (void*) &c, 4);
str = QString(c);
return str;
::close(fd);
}
void fileOperation::openFileWrite(char x,off\t s)
{
int-fd;
char c[2]={x};
fd=open(“/home/stud/txtFile”,O|CREAT | O|WRONLY,0666);//打开文件
如果(fd==-1)
cout您的代码存在多个问题:
- 函数名很奇怪
- 在写入系统调用之后,您没有检查错误
- 在lseek系统调用之后,您没有检查错误
- 关闭系统调用后,您没有检查错误
- 您不一致地将
:
前缀用于关闭系统调用,但不使用其余前缀
- 即使打开未成功,您仍在尝试关闭
- 您试图向文件中写入2个字符,但随后又试图读回4个字符
- 您有一个剩余的syncfs落后评论
- 您硬编码了主路径,而不是使用一些主变量
- 您试图在读取中创建多余的临时变量“str”
- 您试图在返回后关闭
- 您的代码非常特定于平台,而您已经依赖于Qt
我个人会扔掉你的代码,改用这个:
main.cpp
构建并运行
尝试检查文件函数的返回值,包括将其关闭……此外,文件实际包含什么内容(十六进制转储可能是最好的,因为您似乎将其作为包含0字节的二进制文件处理)?
#include <QString>
#include <QFile>
#include <QDir>
#include <QDebug>
class fileOperation
{
public:
static void write(char x, off_t s = 0)
{
QFile file(QDir::homePath() + "/file.txt");
if (!file.open(QIODevice::WriteOnly | QIODevice::Unbuffered)) {
qDebug() << file.errorString();
return;
}
if (s && !file.seek(s)) {
qDebug() << file.errorString();
return;
}
if (file.write(&x, 1) != 1) {
qDebug() << file.errorString();
return;
}
}
static QString read()
{
QFile file(QDir::homePath() + "/file.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text )) {
qDebug() << file.errorString();
return QString();
}
return QString::fromLatin1(file.readAll());
}
};
int main()
{
fileOperation fo;
fo.write('a');
qDebug() << fo.read();
return 0;
}
TEMPLATE = app
TARGET = main
QT = core
SOURCES += main.cpp
qmake && make && ./main