HRESULT FileReader::GetStartPosition(__int64 *lpllpos)
{
	//Do not get file size if static file unless first time 
	if (m_bReadOnly || !m_fileStartPos) {
		
		if (m_hInfoFile != INVALID_HANDLE_VALUE)
		{
//			BoostThread Boost;
	
			__int64 size = 0;
			GetInfoFileSize(&size);
			//Check if timeshift info file
			if (size > sizeof(__int64))
			{
				//Get the file start pointer
				__int64 length = -1;
				DWORD read = 0;
				LARGE_INTEGER li;
				li.QuadPart = sizeof(__int64);
				::SetFilePointer(m_hInfoFile, li.LowPart, &li.HighPart, FILE_BEGIN);
				::ReadFile(m_hInfoFile, (PVOID)&length, (DWORD)sizeof(__int64), &read, NULL);

				if(length > -1)
				{
					m_fileStartPos = length;
					*lpllpos =  length;
					return S_OK;
				}
			}
		}
		m_fileStartPos = 0;
	}
	*lpllpos = m_fileStartPos;
	return S_OK;
}
示例#2
0
long FileReader::GetStartPosition(int64_t *lpllpos)
{
    //Do not get file size if static file unless first time
    if (m_bReadOnly || !m_fileStartPos) {

        if (m_hInfoFile != INVALID_HANDLE_VALUE)
        {
            int64_t size = 0;
            GetInfoFileSize(&size);
            //Check if timeshift info file
            if (size > sizeof(int64_t))
            {
                //Get the file start pointer
                int64_t length = -1;
#ifdef _WIN32
                DWORD read = 0;
                LARGE_INTEGER li;
                li.QuadPart = sizeof(int64_t);
                ::SetFilePointer(m_hInfoFile, li.LowPart, &li.HighPart, FILE_BEGIN);
                ::ReadFile(m_hInfoFile, (void*)&length, (DWORD)sizeof(int64_t), &read, NULL);
#else
                //TODO: lseek (or fseek for fopen)
#error FIXME: Add a GetStartPosition() implementation for your OS
#endif

                if(length > -1)
                {
                    m_fileStartPos = length;
                    *lpllpos =  length;
                    return S_OK;
                }
            }
        }
        m_fileStartPos = 0;
    }
    *lpllpos = m_fileStartPos;
    return S_OK;
}