本文整理汇总了C++中CAtlFile::Read方法的典型用法代码示例。如果您正苦于以下问题:C++ CAtlFile::Read方法的具体用法?C++ CAtlFile::Read怎么用?C++ CAtlFile::Read使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CAtlFile
的用法示例。
在下文中一共展示了CAtlFile::Read方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: IsValidPatchFile
BOOL IsValidPatchFile(LPCTSTR szFilename)
{
// MSCF
const CHAR szMagicMsu[] = {'M', 'S', 'C', 'F'};
const CHAR szMagicExe[] = {'M', 'Z'};
const int TEST_BUFFER_SIZE = 4;
CHAR buffer[TEST_BUFFER_SIZE] = {0};
BOOL bMatched = FALSE;
CAtlFile file;
if(S_OK == file.Create(szFilename, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING) )
{
if(SUCCEEDED(file.Read(buffer, TEST_BUFFER_SIZE)))
{
LPCTSTR szDot = _tcsrchr(szFilename, _T('.'));
if(szDot)
{
++szDot;
if(_tcsicmp(szDot, _T("msu"))==0)
{
bMatched = memcmp(buffer, szMagicMsu, 4)==0;
}
else if(_tcsicmp(szDot, _T("exe"))==0)
{
bMatched = memcmp(buffer, szMagicExe, 2)==0;
}
else
bMatched = TRUE;
}
}
file.Close();
}
return bMatched;
}
示例2: LoadWords
bool Speller::LoadWords( LPCTSTR path, WordContainer& words )
{
CAtlFile file;
bool result = false;
if (SUCCEEDED(file.Create(path, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING))) {
ULONGLONG size = 0;
file.GetSize(size);
if (size > 0) {
std::vector<char> data(static_cast<unsigned>(size));
if (SUCCEEDED(file.Read(&data[0], static_cast<DWORD>(data.size())))) {
std::vector<wchar_t> unicode;
UTF8toUTF16(&data[0], data.size(), unicode);
std::wistringstream in(std::wstring(&unicode[0], unicode.size()));
typedef std::istream_iterator<StringType,StringType::value_type,
StringType::traits_type> iterator;
std::copy(iterator(in),iterator(),std::inserter(words,words.end()));
result = true;
}
}
}
return result;
}
示例3: GetContiInfo
bool CDTManager::GetContiInfo( CString file,CString& url,int64& len,int& cur )
{
CAtlFile f;
if(ERROR_SUCCESS!=f.Create(file,FILE_GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,OPEN_EXISTING)!=ERROR_SUCCESS)
{
return false;
}
if(ERROR_SUCCESS!=f.Read(&len,sizeof len)&&f.Read(&cur,sizeof cur)!=ERROR_SUCCESS)
return false;
f.Read(&cur,sizeof cur);
ULONGLONG flen=0;
f.GetSize(flen);
wchar_t* buf=new wchar_t[((size_t)flen)/2+1];
ZeroMemory(buf,((size_t)flen)/2+1);
f.Read(buf,(DWORD)flen);
url=buf;
delete [] buf;
f.Close();
return true;
}
示例4: GetFavicon
HICON CFaviconManager::GetFaviconFromURL(LPCTSTR url)
{
CString strFaviconURL;
CString strHtmlPath;
if (SUCCEEDED(::URLDownloadToCacheFile(NULL, url, strHtmlPath.GetBuffer(MAX_PATH), MAX_PATH, 0, NULL))) {
strHtmlPath.ReleaseBuffer();
CAtlFile file;
if (SUCCEEDED(file.Create(strHtmlPath, GENERIC_READ, 0, OPEN_EXISTING))) {
enum { kMaxReadSize = 2000 };
unique_ptr<char[]> htmlContent(new char[kMaxReadSize + 1]);
DWORD dwReadSize = 0;
file.Read((LPVOID)htmlContent.get(), kMaxReadSize, dwReadSize);
htmlContent[dwReadSize] = '\0';
boost::regex rx("<link (?:(?<rel>rel=[\"']?(?:shortcut icon|icon)[\"']?) (?<href>href=[\"']?(?<url>[^ \"]+)[\"']?)|(?<href>href=[\"']?(?<url>[^ \"]+)[\"']?) (?<rel>rel=[\"']?(?:shortcut icon|icon)[\"']?))[^>]+>", boost::regex::icase);
boost::cmatch result;
if (boost::regex_search(htmlContent.get(), result, rx)) {
CString strhref = result["url"].str().c_str();
DWORD dwSize = INTERNET_MAX_URL_LENGTH;
::UrlCombine(url, strhref, strFaviconURL.GetBuffer(INTERNET_MAX_URL_LENGTH), &dwSize, 0);
strFaviconURL.ReleaseBuffer();
}
}
}
if (strFaviconURL.IsEmpty()) { // ルートにあるFaviconのアドレスを得る
DWORD cchResult = INTERNET_MAX_URL_LENGTH;
if (::CoInternetParseUrl(url, PARSE_ROOTDOCUMENT, 0, strFaviconURL.GetBuffer(INTERNET_MAX_URL_LENGTH), INTERNET_MAX_URL_LENGTH, &cchResult, 0) == S_OK) {
strFaviconURL.ReleaseBuffer();
strFaviconURL += _T("/favicon.ico");
}
}
if (strFaviconURL.GetLength() > 0) {
CCritSecLock lock(s_cs);
CIconHandle hIcon = GetFavicon(strFaviconURL);
if (hIcon == NULL) {
hIcon = _DownloadFavicon(strFaviconURL);
if (hIcon) {
s_mapIcon[std::wstring(strFaviconURL)] = hIcon;
hIcon = hIcon.DuplicateIcon();
}
} else {
hIcon = hIcon.DuplicateIcon();
}
return hIcon;
}
return NULL;
}
示例5: LoadFromFile
BOOL CXmlManager::LoadFromFile( LPCTSTR szfilename )
{
BOOL ret = FALSE;
CAtlFile file;
if(S_OK == file.Create(szfilename, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING) )
{
int nsize = ::GetFileSize(file, NULL);
char* szbuf = new char[nsize + 1];
if(szbuf)
{
if(S_OK == file.Read(szbuf, nsize))
{
szbuf[nsize] = 0;
ret = LoadFromString(szbuf, nsize);
}
delete [] szbuf;
}
}
return ret;
}
示例6:
// 指定したcodepageのテキストとしてファイルを読み込みます
CString Util::File::ReadAllText(const CString& path, const UINT codePage)
{
CString rc;
CAtlFile file;
if(file.Create(path, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING) != S_OK){
rc.Format(_T("ERROR: File Not Found[path=%s]\n"), (LPCTSTR)path);
return rc;
}
ULONGLONG size;
if(file.GetSize(size) != S_OK){
rc.Format(_T("ERROR: File GetSize[%s]\n"), (LPCTSTR)path);
return rc;
}
CAtlArray<char> buf;
buf.SetCount((size_t)size+1);
if(file.Read(buf.GetData(), (DWORD)size) != S_OK){
rc.Format(_T("ERROR: File Read[%s]\n"), (LPCTSTR)path);
return rc;
}
buf[(size_t)size] = 0;
rc = CA2CT(buf.GetData(), codePage);
return rc;
}
示例7: runtime_error
std::vector<unsigned char> DumpUploaderWebServiceEx::ReadFile(const std::wstring& path)
{
std::vector<unsigned char> data;
CAtlFile file;
for (int i = 0; ; ++i)
{
file.Attach(CreateFile(path.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL));
if (file != INVALID_HANDLE_VALUE)
break;
DWORD err = GetLastError();
// File indexing services like to open just closed files (our doctor_dump_mini.zip file), so lets make few tries.
if (err == ERROR_SHARING_VIOLATION && i < 10)
{
Sleep(1000);
continue;
}
CStringA text;
text.Format("failed (err %d) to open file %ls", err, path.c_str());
throw std::runtime_error(text);
}
ULONGLONG fileSize;
if (FAILED(file.GetSize(fileSize)))
throw std::runtime_error(std::string("failed to get file size ") + (const char*)CW2A(path.c_str()));
if (fileSize != 0)
{
data.resize((size_t)fileSize);
if (FAILED(file.Read(&data[0], static_cast<DWORD>(fileSize))))
throw std::runtime_error(std::string("failed to read file ") + (const char*)CW2A(path.c_str()));
}
return data;
}
示例8: ReadFile
LPVOID ReadFile(LPCTSTR pPath, DWORD *length /* = NULL */, DWORD *lengthPlusSpace /* = NULL */, DWORD spacepadding /* = 0 */, BOOL bEOF /* = FALSE */, BOOL bFailedMsgBox /* = TRUE */)
{
CAtlFile file;
if(FAILED(file.Create(pPath, GENERIC_READ, 0, OPEN_EXISTING))) {
if(bFailedMsgBox)
{
/*CString sMsg;
sMsg.Format(IDS_ERR_FILENOTFOUND, pPath);
MessageBox(NULL, sMsg, _T("ERROR"), MB_OK);*/
}
return NULL;
}
UINT64 len64 = 0;
file.GetSize(len64);
if(len64 > _UI32_MAX)return NULL;
DWORD len = (DWORD)len64;
DWORD lenPlusSpace = len + spacepadding;
if(lenPlusSpace < len)
{
lenPlusSpace = len;
spacepadding = 0;
}
LPVOID p = new char[lenPlusSpace + 1];
file.Read(p, len);
LPBYTE sp = ((LPBYTE)p)+lenPlusSpace-1;
for(;spacepadding;spacepadding--)
{
*sp = ' ';
sp--;
}
*((LPBYTE)p+lenPlusSpace) = '\0';
if(bEOF)*((LPBYTE)p+len) = 0x1a;
file.Close();
if(length!=NULL)*length=len;
if(lengthPlusSpace!=NULL)*lengthPlusSpace = lenPlusSpace;
return p;
}
示例9: file_get_contents
BOOL file_get_contents( LPCTSTR lpszFilename, CStringA &strA )
{
CAtlFile file;
if( FAILED( file.Create(lpszFilename, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING) ) )
return FALSE;
BOOL bRet = FALSE;
do
{
ULONGLONG filesize = 0;
if( FAILED( file.GetSize(filesize) ) )
break;
strA = "";
if(filesize>0)
{
file.Read( strA.GetBuffer((int)filesize), (DWORD)filesize );
strA.ReleaseBuffer((int)filesize);
}
bRet = TRUE;
} while (FALSE);
file.Close();
return bRet;
}
示例10: FileSending
void ServerAgent::FileSending(std::string filepath)
{
int msglen=0;
int requesttype=0;
string filename;
GetFileNameFromPath(filepath,filename);
int times=10;//传输次数
RequestFileMessage rqmsg;
rqmsg.Filename=filename;
CString pathstr(filepath.data());
CAtlFile file;
HRESULT r=file.Create(pathstr,GENERIC_READ | GENERIC_WRITE, 0, OPEN_EXISTING);
if (FAILED(r))
{
std::cout<<"文件打开错误"<<std::endl;
}
ULONGLONG filesize;
if(FAILED(file.GetSize(filesize)))
{
std::cout<<"获取文件大小错误"<<std::endl;
}
std::cout<<"文件"<<filepath<<"大小"<<filesize<<std::endl;
times=filesize/packagelen;//计算出要发送的次数
if ((filesize%packagelen)>0)
{
times++;
}
m_sendtimes=times;
std::cout<<"文件需要发送次数"<<m_sendtimes<<std::endl;
rqmsg.TransferTimes=times;
MessageData rqmsgdata=rqmsg.GetBytes();
ConnectServer();//连接服务器
boost::system::error_code sendec,recvec;
boost::shared_array<char> recbuf(new char[100]);
std::size_t rec_num=m_sock.receive(boost::asio::buffer(recbuf.get(),100));//先接受4字节的数据
m_sock.send(boost::asio::buffer(rqmsgdata.buf.get(),rqmsgdata.buflen));
m_sock.receive(boost::asio::buffer(recbuf.get(),100));
WrtieFileMessage writefilemsg;
writefilemsg.packagebytesnum=packagelen;//设定上每包数据的数据量
for (int i=0;i<m_sendtimes;i++)
{
writefilemsg.packagenum=i;
if (i==(m_sendtimes-1))
{
if (filesize%packagelen>0)
{
writefilemsg.packagebytesnum=filesize%packagelen;
MessageData data=writefilemsg.GetBytes();
file.Read(data.buf.get()+MSGHEADLEN+WriteFileMessagelen,writefilemsg.packagebytesnum);
m_sock.send(boost::asio::buffer(data.buf.get(),data.buflen));
m_SendedBytes+=writefilemsg.packagebytesnum;
}
else
{
MessageData data=writefilemsg.GetBytes();
file.Read(data.buf.get()+MSGHEADLEN+WriteFileMessagelen,packagelen);
m_sock.send(boost::asio::buffer(data.buf.get(),data.buflen));
m_SendedBytes+=packagelen;
}
}
else
{
MessageData data=writefilemsg.GetBytes();
file.Read(data.buf.get()+MSGHEADLEN+WriteFileMessagelen,packagelen);
m_sock.send(boost::asio::buffer(data.buf.get(),data.buflen));
m_SendedBytes+=packagelen;
}
rec_num=m_sock.receive(boost::asio::buffer(recbuf.get(),100));
}
m_Sending=false;
}
示例11: RunMergeFile
//.........这里部分代码省略.........
bFound = TRUE; // Avoid fallback check below
break;
}
nOffset += pFile->m_nSize;
}
}
if ( ! bFound ) // No filename match, try exact size
{
nOffset = 0;
// const CString strExt = PathFindExtension( strSourceName );
for ( POSITION pos = pDownload->m_pTorrent.m_pFiles.GetHeadPosition() ; pos ; )
{
pFile = pDownload->m_pTorrent.m_pFiles.GetNext( pos );
if ( pFile->m_nSize == nSourceSize ) // && strExt == PathFindExtension( pFile->m_sPath )
{
DEBUG_ONLY( theApp.Message( MSG_DEBUG, _T("Merge Filesize Fallback") ) );
nSourceOffset = nOffset;
// bFound = TRUE;
break;
}
nOffset += pFile->m_nSize;
}
}
}
pLock.Unlock();
const float fIncrement = fProgress / oList.size();
const DWORD nBufferLength = 256 * 1024; // Was 65536?
// Read missing file fragments from selected file
auto_array< BYTE > Buf( new BYTE [nBufferLength] );
Fragments::List::const_iterator pItr = oList.begin();
const Fragments::List::const_iterator pEnd = oList.end();
for ( ; ! m_pEvent && pItr != pEnd ; ++pItr )
{
m_fProgress += fIncrement; // Update tooltip
QWORD qwLength = pItr->end() - pItr->begin();
QWORD qwOffset = pItr->begin();
// Check for overlapped fragments
if ( qwOffset + qwLength <= nSourceOffset ||
nSourceOffset + nSourceSize <= qwOffset )
continue; // No overlaps
// Calculate overlapped range end offset
QWORD qwEnd = min( qwOffset + qwLength, nSourceOffset + nSourceSize );
// Calculate overlapped range start offset
qwOffset = max( qwOffset, nSourceOffset );
// Calculate overlapped range length
qwLength = qwEnd - qwOffset;
// Calculate file offset if any
QWORD qwFileOffset = ( qwOffset > nSourceOffset ) ? qwOffset - nSourceOffset : 0;
if ( FAILED( oSource.Seek( qwFileOffset, FILE_BEGIN ) ) )
continue;
DWORD dwToRead;
while ( ( dwToRead = (DWORD)min( qwLength, (QWORD)nBufferLength ) ) != 0 && ! m_pEvent )
{
DWORD dwReaded = 0;
if ( SUCCEEDED( oSource.Read( Buf.get(), dwToRead, dwReaded ) ) && dwReaded )
{
pLock.Lock();
if ( ! Downloads.Check( pDownload ) || pDownload->IsCompleted() || pDownload->IsMoving() )
return;
pDownload->SubmitData( qwOffset, Buf.get(), (QWORD)dwReaded );
pLock.Unlock();
qwOffset += (QWORD)dwReaded;
qwLength -= (QWORD)dwReaded;
}
else
{
// File error or end of file. Non-Fatal
break;
}
}
pLock.Lock();
if ( ! Downloads.Check( pDownload ) || pDownload->IsCompleted() || pDownload->IsMoving() )
return;
if ( bMergeValidation )
pDownload->RunValidation();
pDownload->SetModified();
pLock.Unlock();
}
// m_bSuccess = true;
}
示例12: Combine
HRESULT STDMETHODCALLTYPE CSoftMgrUpdateHelper::Combine( LPCWSTR lpwszDifflib )
{
#if OPEN_VCDIFF
// 加载Delta
BkDatLibContent delta;
CDataFileLoader loader;
if(!loader.GetLibDatContent(lpwszDifflib, delta)) return ::HRESULT_FROM_WIN32(ERROR_BAD_FORMAT);
// 目标文件路径
wchar_t szDstPath[MAX_PATH] = {0};
{
::GetModuleFileNameW(NULL, szDstPath, MAX_PATH);
::PathRemoveFileSpecW(szDstPath);
wcscat_s(szDstPath, MAX_PATH, L"\\KSoft\\Data\\");
wcscat_s(szDstPath, MAX_PATH, ::PathFindFileNameW(lpwszDifflib));
//
//@Issue
// 根据名称来判断库类型
//
//@Note
// 命名规则为:libname_old_new.dat
//
LPWSTR pSep = wcschr(::PathFindFileNameW(szDstPath), L'_');
if(pSep == NULL) return ::HRESULT_FROM_WIN32(ERROR_INVALID_PARAMETER);
pSep[0] = L'\0';
wcscat_s(szDstPath, MAX_PATH, L".dat");
}
// 加载字典文件
CAtlFile dictFile;
HRESULT hr = dictFile.Create(szDstPath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, OPEN_EXISTING);
if(!SUCCEEDED(hr)) return hr;
ULONGLONG dictSize;
hr = dictFile.GetSize(dictSize);
if(!SUCCEEDED(hr)) return hr;
auto_buffer<char> dict(static_cast<size_t>(dictSize));
if(dict.empty()) return ::HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY);
DWORD bytesRead;
hr = dictFile.Read(dict.data(), static_cast<DWORD>(dict.size()), bytesRead);
if(!SUCCEEDED(hr)) return hr;
dictFile.Close();
// 创建目标临时文件
CAtlTemporaryFile tempTarget;
hr = tempTarget.Create();
if(!SUCCEEDED(hr)) return hr;
//
// 开始合并
//
//@Note
// Dict(Source) + Delta => Target
//
Output2File output2File(tempTarget);
{
VCDiffStreamingDecoder decoder;
decoder.StartDecoding(&dict[0], dict.size());
size_t beg = 0;
size_t end = static_cast<size_t>(delta.nLen);
LPCSTR pDelta = reinterpret_cast<LPCSTR>(delta.pBuffer);
while(beg < end)
{
static const size_t MAX_THUNK_SIZE = 16*1024;
size_t size = end - beg;
if(size > MAX_THUNK_SIZE) size = MAX_THUNK_SIZE;
if(!decoder.DecodeChunkToInterface(pDelta + beg, size, &output2File))
return ::HRESULT_FROM_WIN32(ERROR_BAD_FORMAT);
beg += size;
}
if(!decoder.FinishDecoding())
return ::HRESULT_FROM_WIN32(ERROR_BAD_FORMAT);
}
// 根据写入文件大小与期望大小来判断是否合并成功
ULONGLONG dstSize;
hr = tempTarget.GetPosition(dstSize);
if(!SUCCEEDED(hr) || dstSize != output2File.GetTotalBytes()) return ::HRESULT_FROM_WIN32(ERROR_WRITE_FAULT);
// 移动到目标路径
return tempTarget.Close(szDstPath);
#else
return S_OK;
#endif
}
示例13: GetProperties
bool CTrueType::GetProperties(LPCTSTR pszFilePath, TTF_PROPERTIES* pProperties)
{
CAtlFile FontFile;
HRESULT hr = FontFile.Create(pszFilePath, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING);
if (FAILED(hr))
return false;
TTF_OFFSET_TABLE ttOffsetTable;
FontFile.Read(&ttOffsetTable, sizeof(TTF_OFFSET_TABLE));
ttOffsetTable.uNumOfTables = SWAPWORD(ttOffsetTable.uNumOfTables);
ttOffsetTable.uMajorVersion = SWAPWORD(ttOffsetTable.uMajorVersion);
ttOffsetTable.uMinorVersion = SWAPWORD(ttOffsetTable.uMinorVersion);
// See if this is a true type font and the version is 1.0
if (ttOffsetTable.uMajorVersion != 1 || ttOffsetTable.uMinorVersion != 0)
return false;
TTF_TABLE_DIRECTORY tblDir;
TTF_TABLE_DIRECTORY tblName;
TTF_TABLE_DIRECTORY tblOS2;
bool bFoundNameTable = false;
bool bFoundOS2Table = false;
for (int i=0; i< ttOffsetTable.uNumOfTables; i++)
{
FontFile.Read(&tblDir, sizeof(TTF_TABLE_DIRECTORY));
CString strName = CString(tblDir.szTag, 4);
if (strName.IsEmpty())
break;
if (!strName.CompareNoCase("name"))
{
bFoundNameTable = true;
tblName = tblDir;
tblName.uLength = SWAPLONG(tblName.uLength);
tblName.uOffset = SWAPLONG(tblName.uOffset);
}
else
if (!strName.CompareNoCase("OS/2"))
{
bFoundOS2Table = true;
tblOS2 = tblDir;
tblOS2.uLength = SWAPLONG(tblOS2.uLength);
tblOS2.uOffset = SWAPLONG(tblOS2.uOffset);
}
if (bFoundNameTable && bFoundOS2Table)
break;
}
if (bFoundNameTable)
{
FontFile.Seek(tblName.uOffset, FILE_BEGIN);
TTF_NAME_TABLE_HEADER ttNTHeader;
FontFile.Read(&ttNTHeader, sizeof(TTF_NAME_TABLE_HEADER));
ttNTHeader.uFSelector = SWAPWORD(ttNTHeader.uFSelector);
ttNTHeader.uNRCount = SWAPWORD(ttNTHeader.uNRCount);
ttNTHeader.uStorageOffset = SWAPWORD(ttNTHeader.uStorageOffset);
for (int i=0; i<ttNTHeader.uNRCount; i++)
{
TTF_NAME_RECORD ttRecord;
FontFile.Read(&ttRecord, sizeof(TTF_NAME_RECORD));
ttRecord.uPlatformID = SWAPWORD(ttRecord.uPlatformID);
ttRecord.uEncodingID = SWAPWORD(ttRecord.uEncodingID);
ttRecord.uLanguageID = SWAPWORD(ttRecord.uLanguageID);
ttRecord.uNameID = SWAPWORD(ttRecord.uNameID);
ttRecord.uStringLength = SWAPWORD(ttRecord.uStringLength);
ttRecord.uStringOffset = SWAPWORD(ttRecord.uStringOffset);
if (ttRecord.uPlatformID != 3) // Microsoft
continue;
ULONGLONG nPos = 0;
FontFile.GetPosition(nPos);
FontFile.Seek(tblName.uOffset + ttRecord.uStringOffset + ttNTHeader.uStorageOffset, FILE_BEGIN);
int iUnicodeChars = (ttRecord.uStringLength + 1) / 2;
WCHAR* pUnicodeBuffer = new WCHAR[iUnicodeChars];
FontFile.Read(pUnicodeBuffer, ttRecord.uStringLength);
for (int i = 0; i < iUnicodeChars; i++)
pUnicodeBuffer[i] = SWAPWORD(pUnicodeBuffer[i]);
CString strName = CString(pUnicodeBuffer, iUnicodeChars);
delete [] pUnicodeBuffer;
FontFile.Seek(nPos, FILE_BEGIN);
if (strName.IsEmpty())
continue;
switch (ttRecord.uNameID)
{
case 1: // Font family
pProperties->strFamily.IsEmpty() ? pProperties->strFamily = strName : void();
break;
case 0: // Copyright notice
pProperties->strCopyright.IsEmpty() ? pProperties->strCopyright = strName : void();
break;
case 7: // Trademark notice
pProperties->strTrademark.IsEmpty() ? pProperties->strTrademark = strName : void();
//.........这里部分代码省略.........
示例14: EncodeFile
HRESULT CZlib::EncodeFile( LPCWSTR lpwszSrcFile, LPCWSTR lpwszDstFile, int level )
{
if ( zlib_compress )
{
CAtlFile hInFile;
HRESULT hr = hInFile.Create(
lpwszSrcFile,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_DELETE,
OPEN_EXISTING);
if (FAILED(hr))
return hr;
CAtlFile hOutFile;
hr = hOutFile.Create(
lpwszDstFile,
GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_DELETE,
CREATE_ALWAYS);
if (FAILED(hr))
return hr;
ULONGLONG uInFileSize = 0;
hr = hInFile.GetSize(uInFileSize);
if (FAILED(hr))
return hr;
// 0长度文件不需要压缩
if (0 == uInFileSize)
return S_OK;
// 太大的文件不压缩
if (uInFileSize > ZLIB_SINGLE_FILE_MAX_SIZE ) //假定压缩比为4:1
return E_FAIL;
// 读取输入
CAtlArray<BYTE> bufRead;
bufRead.SetCount((size_t)uInFileSize);
if (uInFileSize != bufRead.GetCount())
return E_OUTOFMEMORY;
hr = hInFile.Read(bufRead.GetData(), (DWORD)bufRead.GetCount());
if (FAILED(hr))
return hr;
// 准备压缩
ULONGLONG uOutFileSize = max(uInFileSize, ZLIB_DECOMPRESS_INIT_BUFF_SIZE);
CAtlArray<BYTE> bufWrite;
try
{
while (uOutFileSize <= ZLIB_SINGLE_FILE_MAX_SIZE )
{
bufWrite.SetCount(0);
bufWrite.SetCount((DWORD)uOutFileSize);
if (uOutFileSize != bufWrite.GetCount())
return E_OUTOFMEMORY;
DWORD dwcompressSize = DWORD(uOutFileSize);
int nRet = zlib_compress2(
bufWrite.GetData(),
&dwcompressSize,
bufRead.GetData(),
(int)bufRead.GetCount(),
level
);
if (nRet == Z_OK && dwcompressSize <= uOutFileSize)
{
bufWrite.SetCount(dwcompressSize);
break;
}
if (nRet != Z_BUF_ERROR)
return E_FAIL;
uOutFileSize *= 2;
}
}
catch (...)
{
return E_FAIL;
}
hr = hOutFile.Write(bufWrite.GetData(), (DWORD)bufWrite.GetCount());
if (FAILED(hr))
return hr;
return S_OK;
}
else
{
return E_NOINTERFACE;
}
}
示例15: Init
//----------------------------------------------------------------------------
// Init
HRESULT CAnchoBackgroundAPI::Init(LPCTSTR lpszThisPath, LPCTSTR lpszRootURL, BSTR bsID, LPCTSTR lpszGUID, LPCTSTR lpszPath)
{
// set our ID
m_bsID = bsID;
m_GUID = lpszGUID;
m_sRootURL = lpszRootURL;
CString sPath(lpszPath);
// create logger window
IF_FAILED_RET(CLogWindow::CreateLogWindow(&m_LogWindow.p));
// create a magpie instance
#ifdef MAGPIE_REGISTERED
IF_FAILED_RET(m_Magpie.CoCreateInstance(CLSID_MagpieApplication));
#else
// Load magpie from the same path where this exe file is.
CString s(lpszThisPath);
s += _T("Magpie.dll");
HMODULE hModMagpie = ::LoadLibrary(s);
if (!hModMagpie)
{
return E_FAIL;
}
fnCreateMagpieInstance CreateMagpieInstance = (fnCreateMagpieInstance)::GetProcAddress(hModMagpie, "CreateMagpieInstance");
if (!CreateMagpieInstance)
{
return E_FAIL;
}
IF_FAILED_RET(CreateMagpieInstance(&m_Magpie));
#endif
// add a loader for scripts in the extension filesystem
IF_FAILED_RET(m_Magpie->AddFilesystemScriptLoader((LPWSTR)(LPCWSTR)sPath));
// add a loder for scripts in this exe file
IF_FAILED_RET(m_Magpie->AddResourceScriptLoader((ULONG)_AtlModule.GetResourceInstance()));
// advise logger
IF_FAILED_RET(AtlAdvise(m_Magpie, (IUnknown*)(CAnchoAddonBackgroundLogger*)(this), DIID__IMagpieLoggerEvents, &m_dwMagpieSinkCookie));
// load manifest
CString sManifestFilename;
sManifestFilename.Format(_T("%smanifest.json"), sPath);
CAtlFile f;
IF_FAILED_RET(f.Create(sManifestFilename, GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING));
ULONGLONG nLen = 0;
IF_FAILED_RET(f.GetSize(nLen));
// limit to 4gb
if (nLen > 0x00000000ffffffff)
{
return E_OUTOFMEMORY;
}
DWORD dwLen = (DWORD)nLen;
CStringA sManifest("exports.manifest = ");
DWORD strLen = (DWORD)sManifest.GetLength();
IF_FAILED_RET(f.Read(sManifest.GetBuffer(dwLen + strLen) + strLen, dwLen));
sManifest.ReleaseBuffer(dwLen + strLen);
sManifest += _T(';');
IF_FAILED_RET(m_Magpie->RunScript(L"manifest", (LPWSTR)(LPCWSTR)CA2W(sManifest)));
// set ourselfs in magpie as a global accessible object
IF_FAILED_RET(m_Magpie->AddExtension((LPWSTR)s_AnchoGlobalAPIObjectName, (IAnchoBackgroundAPI*)this));
// initialize Ancho API
// api.js will do now additional initialization, like looking at the manifest
// and creating a background page.
IF_FAILED_RET(m_Magpie->Run((LPWSTR)s_AnchoMainAPIModuleID));
return S_OK;
}