Closed Summer20130725 closed 1 year ago
没问题,这几天有时间看看
没问题,这几天有时间看看
作者大大,不用看了我想了一个晚上想出来了。这里只考虑了windows平台,Linux的话作者大大你也可以看一看,有时间把windows平台支持的方案加上去,代码如下:
/* ncmcrypt.h */
#ifdef UNICODE
#undef UNICODE
#endif
#include <windows.h>
/* only read */
#define O_R 0x000000
/* only write */
#define O_W 0x000001
BOOL WINAPI archivesTime(LPCTSTR filename, bool blMode);
BOOL WINAPI getFileTimeEx(HANDLE hFile, FILETIME ft[3]);
BOOL WINAPI setFileTimeEx(HANDLE hFile, FILETIME ft[3]);
/* ncmcrypt.cpp */
/* Creation, LastWrite, LastAccess */
FILETIME AllFileTime[3] = {0};
BOOL WINAPI NeteaseCrypt::getFileTimeEx(HANDLE hFile, FILETIME ft[3])
{
DWORD dwRet = FALSE;
dwRet = GetFileTime(hFile, ft, ft + 2, ft + 1);
return dwRet;
}
BOOL WINAPI NeteaseCrypt::setFileTimeEx(HANDLE hFile, FILETIME ft[3])
{
DWORD dwRet = FALSE;
dwRet = SetFileTime(hFile, ft, ft + 2, ft + 1);
return dwRet;
}
BOOL WINAPI NeteaseCrypt::archivesTime(LPCTSTR filename, bool blMode)
{
HANDLE hFile = nullptr;
DWORD dwRet = FALSE;
hFile = CreateFile(
filename,
blMode == O_W ? FILE_WRITE_ATTRIBUTES : FILE_READ_ATTRIBUTES,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
std::cout << __FUNCTION__ << "() File Handle is Invalid!!!" << std::endl;
return -1;
}
switch (blMode)
{
case O_R:
dwRet = getFileTimeEx(hFile, AllFileTime);
break;
case O_W:
dwRet = setFileTimeEx(hFile, AllFileTime);
break;
}
CloseHandle(hFile);
return dwRet;
}
调用位置:
效果:
感谢提供代码,有时间进去
作者大大你好,我用了你这个命令行版本的网易音乐解码器我觉得不错,我想给个建议就是能否保留原始文件时间戳?转码之后文件时间变了!