bool ItemManager::resetTimestamp(const ItemInfoType &info) { #if defined(Q_OS_MAC) struct timeval times[2]; // アクセス日時 times[0].tv_sec = info.timestampOfRead.toTime_t(); times[0].tv_usec= info.timestampOfRead.toMSecsSinceEpoch() % 100 * 1000; // 更新日時 times[1].tv_sec = info.timestampOfModified.toTime_t(); times[1].tv_usec= info.timestampOfModified.toMSecsSinceEpoch() % 100 * 1000; // 反映(アクセス日時は反映できないor反映してもすぐ変わる模様) return !::utimes(info.filePath.toLocal8Bit(), times); #elif defined(Q_OS_WIN32) QVector<wchar_t> fileNameW(info.filePath.size() + 1); info.filePath.toWCharArray(&fileNameW[0]); HANDLE hFile = ::CreateFile( &fileNameW[0], GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (INVALID_HANDLE_VALUE != hFile) { BOOL r; // time_t の基準日から FILETIME への変更 LONGLONG offsetOfTimeT = 0; SYSTEMTIME stBase = { 1970, 1, 0, 1, 0, 0, 0, 0 }; ::SystemTimeToFileTime(&stBase, (FILETIME*)&offsetOfTimeT); // タイムスタンプを FILETIME の基準日からに変更し適用 LONGLONG nCreationTime = 0, nLastAccessTime = 0, nLastWriteTime = 0; nCreationTime = offsetOfTimeT + info.timestampOfCreated.toMSecsSinceEpoch() * 10000LL; nLastAccessTime = offsetOfTimeT + info.timestampOfRead.toMSecsSinceEpoch() * 10000LL; nLastWriteTime = offsetOfTimeT + info.timestampOfModified.toMSecsSinceEpoch() * 10000LL; r = ::SetFileTime(hFile, (const FILETIME*)&nCreationTime, (const FILETIME*)&nLastAccessTime, (const FILETIME*)&nLastWriteTime); ::CloseHandle(hFile); return FALSE != r; } return false; #else #error "not impliment1" #endif }
bool FreeImage::saveToFile( const UTF8String & fileName, SavingFormat savingFormat, unsigned int quality ) { #ifdef WIN32 WString fileNameW( fileName ); #endif load(); #ifdef WIN32 bool r( FreeImage_SaveU( ( FREE_IMAGE_FORMAT ) savingFormat, this -> freeImage, fileNameW.toCString(), quality ) ); #else bool r( FreeImage_Save( ( FREE_IMAGE_FORMAT ) savingFormat, this -> freeImage, fileName.toCString(), quality ) ); #endif if ( r ) { log( String( "Success writing file : " ) << fileName ); return true; } else { error( String( "error writing file : " ) << fileName ); return false; } }