我需要为某些文件设置上次修改日期。这是我申请的基本能力。
我不知道如何用QT做到这一点。我没有看到它的方法/功能。 我可以用Qt阅读日期,但我看不出如何设置日期。
现在......我知道一些(我认为实际上都是)来自MS的Windows API具有这种能力。
问题在于我不是在寻找“Windows”唯一的解决方案。我需要这种能力才能在Windows,Linux和Mac上运行。这就是我选择Qt的原因......
建议的任何解决方案都应该是以API为中心的(不需要系统命令/实用程序),解决方案应涵盖3个主要操作系统(Win,Linux,Mac)。
答案 0 :(得分:4)
这个的posix函数是utime(2),它也可以在Windows上作为MSVCRT的一部分使用(参见MSDN)。所以使用它应该涵盖Mac,Linux和Windows。
由于QAbstractFileEngine没有公开此功能,我认为它不会在任何其他Qt文件系统API中可用。
答案 1 :(得分:4)
在Windows中包含qt_windows.h
并使用修改日期和创建日期。
QDateTime newModifiedTime=ui->dateTimeEdit_modified->dateTime();
QDateTime newCreationDate=TimeEdit_Creation->dateTime();
FILETIME pmodifiedtime,pcreationtime;
HANDLE hfile;
LPCWSTR filename=Filename.toStdWString().c_str();
hfile=CreateFile(filename,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hfile==INVALID_HANDLE_VALUE)
{
QMessageBox::information(this,"Failed","Unable to open file,check file permission");
}
else
{
LONGLONG ll = Int32x32To64(newCreationDate.toTime_t(), 10000000) + 116444736000000000;
pcreationtime.dwLowDateTime = (DWORD) ll;
pcreationtime.dwHighDateTime = ll >> 32;
LONGLONG ll2 = Int32x32To64(newModifiedTime.toTime_t(), 10000000) + 116444736000000000;
pmodifiedtime.dwLowDateTime = (DWORD) ll2;
pmodifiedtime.dwHighDateTime = ll2 >> 32;
if(!SetFileTime(hfile,&pcreationtime,NULL,&pmodifiedtime))
{
QMessageBox::information(this,"Failed","Unable to set Date And Time");
}
else
{
QMessageBox::information(this,"Success","Date And Time Updated");
ui->lineEdit_FileName->clear();
}
}
CloseHandle(hfile);
对于Linux,添加包含utime.h
和fcntl.h
然后
struct utimbuf timebuffer;
timebuffer.modtime=newModifiedTime.toTime_t();
const char *filename=Filename.toAscii();
if((utime(filename,&timebuffer))<0)
{
QMessageBox::information(this,"Error","Unable to set Time");
}
else
{
QMessageBox::information(this,"Success","Date Changed");
}
答案 2 :(得分:2)
我认为没有具体的内容。最简单的方法可能是打开文件进行写入+追加并再次关闭 - 这可以让操作系统/文件系统更新修改时间。
你也可以尝试阅读权限并调用setPerimssions,这有时被用作更新文件的更安全的方式,因为它是非阻塞的。
编辑:设置您可以使用的任意上次修改时间 - 在Windows SetFileTime函数上。
有一个boost::filesystem::last_write_time( )
您想要查看 - 我还没有使用过它。