示例#1
0
		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);
			}
		}
示例#2
0
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;
}