CASE
症状
ATTEMPT
那么,我该怎样做才能发布已经由QFile创建和关闭的文件?
发布Qt文件
void MainWindow::creatFile(){
QFile file("1.dat");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return ;
if(!file.exists())
return;
QTextStream out(&file);
out << "test" <<endl;
out.flush();
file.close(); // .~QFile() is not needed at all.
return;
}
将QString转换为Character(Fortran)
typedef void (* myfun)(char string[255]); //How Qt pass character to Fortran dll
//QString-> std::string -> char*
std::string fileName_std = fileName.replace("/","\\").toStdString();
const char* fileName_cstr = fileName_std.c_str();
char fileName_For90[255];
int length = sizeof(fileName_For90);
//fill the left nulls of char with blanks which are required in Fortran
strcpy(fileName_For90,fileName_cstr);
for(int i = strlen(fileName_For90); i < length; i++){
fileName_For90[i] = ' ';
}
答案 0 :(得分:0)
(这个问题在评论中有答案并编辑到问题中。问题有重复编辑,更像是一个博客而不是一个问题,而且不再清楚问题是什么,而SO期望一个明确的问题和明确的答案。请参阅Question with no answers, but issue solved in the comments (or extended in chat)。我正在将此社区Wiki回答,以便将问题记录为已回答,但我发现很难从所有聊天和编辑中提取答案。)
OP写道:以下是我在解决过程中得到的结果:
- 找到详细信息
.close()
实际上关闭了该文件。可能需要.flush()
,因为您可以在QFile::flush() vs QFile::close()- 真正的问题在于将Fortran中的
醇>QString
转换为Character
。
答案 1 :(得分:0)
我建议使用QSaveFile
。我遇到了许多尝试创建文件的实例,然后立即引用和使用它可能会导致此问题。 QSaveFile在临时空间中创建文件并将其移动到它的最终目的地。当其他函数或信号流程需要对文件起作用时,这似乎更具确定性。这对于QFileSystemWatcher来说尤其如此。
void MainWindow::createFile(){
QSaveFile file("1.dat");
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return ;
if(!file.exists())
return;
QTextStream out(&file);
out << "test" <<endl;
out.flush();
file.commit(); // .~QFile() is not needed at all.
return;
}