static void GET(const char*const p, uint& a, uint& c, uint& m){ WIN32_FIND_DATA ffd; HANDLE h = FindFirstFile(TEXT(p), &ffd); if(h){ a = FileTimeToPOSIX(ffd.ftLastAccessTime); c = FileTimeToPOSIX(ffd.ftCreationTime); m = FileTimeToPOSIX(ffd.ftLastWriteTime); FindClose(h); } }
bool CNFS3Prog::GetFileAttributesForNFS(char *path, fattr3 *pAttr) { DWORD fileAttr; BY_HANDLE_FILE_INFORMATION lpFileInformation; HANDLE hFile; DWORD dwFlagsAndAttributes; fileAttr = GetFileAttributes(path); if (path == NULL || fileAttr == INVALID_FILE_ATTRIBUTES) { return false; } dwFlagsAndAttributes = 0; if (fileAttr & FILE_ATTRIBUTE_DIRECTORY) { pAttr->type = NF3DIR; dwFlagsAndAttributes = FILE_ATTRIBUTE_DIRECTORY | FILE_FLAG_BACKUP_SEMANTICS; } else if (fileAttr & FILE_ATTRIBUTE_ARCHIVE) { pAttr->type = NF3REG; dwFlagsAndAttributes = FILE_ATTRIBUTE_ARCHIVE | FILE_FLAG_OVERLAPPED; } else if (fileAttr & FILE_ATTRIBUTE_NORMAL) { pAttr->type = NF3REG; dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED; } else { pAttr->type = 0; } if (fileAttr & FILE_ATTRIBUTE_REPARSE_POINT) { pAttr->type = NF3LNK; dwFlagsAndAttributes = FILE_ATTRIBUTE_REPARSE_POINT | FILE_FLAG_OPEN_REPARSE_POINT | FILE_FLAG_BACKUP_SEMANTICS; } hFile = CreateFile(path, FILE_READ_EA, FILE_SHARE_READ, NULL, OPEN_EXISTING, dwFlagsAndAttributes, NULL); if (hFile == INVALID_HANDLE_VALUE) { return false; } GetFileInformationByHandle(hFile, &lpFileInformation); CloseHandle(hFile); pAttr->mode = 0; // Set execution right for all pAttr->mode |= 0x49; // Set read right for all pAttr->mode |= 0x124; //if ((lpFileInformation.dwFileAttributes & FILE_ATTRIBUTE_READONLY) == 0) { pAttr->mode |= 0x92; //} ULONGLONG fileSize = lpFileInformation.nFileSizeHigh; fileSize <<= sizeof(lpFileInformation.nFileSizeHigh) * 8; fileSize |= lpFileInformation.nFileSizeLow; pAttr->nlink = lpFileInformation.nNumberOfLinks; pAttr->uid = m_nUID; pAttr->gid = m_nGID; pAttr->size = fileSize; pAttr->used = pAttr->size; pAttr->rdev.specdata1 = 0; pAttr->rdev.specdata2 = 0; pAttr->fsid = 7; //NTFS //4; pAttr->fileid = GetFileID(path); pAttr->atime.seconds = FileTimeToPOSIX(lpFileInformation.ftLastAccessTime); pAttr->atime.nseconds = 0; pAttr->mtime.seconds = FileTimeToPOSIX(lpFileInformation.ftLastWriteTime); pAttr->mtime.nseconds = 0; // This seems to be the changed time, not creation time pAttr->ctime.seconds = FileTimeToPOSIX(lpFileInformation.ftLastWriteTime); pAttr->ctime.nseconds = 0; return true; }