Commit bcf77909 authored by Ilya.Kirillov's avatar Ilya.Kirillov Committed by Alexander Trofimov

Функция OpenTempFile перенесена в Common.

git-svn-id: svn://fileserver/activex/AVS/Sources/TeamlabOffice/trunk/ServerComponents@62428 954022d7-b5bf-4e40-9824-e11837661b57
parent 325c2300
...@@ -532,9 +532,9 @@ namespace NSFile ...@@ -532,9 +532,9 @@ namespace NSFile
class CFileBinary class CFileBinary
{ {
protected: protected:
FILE* m_pFile; FILE* m_pFile;
long m_lFilePosition; long m_lFilePosition;
long m_lFileSize; long m_lFileSize;
...@@ -558,7 +558,7 @@ namespace NSFile ...@@ -558,7 +558,7 @@ namespace NSFile
if (m_pFile != NULL) if (m_pFile != NULL)
{ {
fclose(m_pFile); fclose(m_pFile);
m_pFile = NULL; m_pFile = NULL;
} }
} }
...@@ -579,33 +579,33 @@ namespace NSFile ...@@ -579,33 +579,33 @@ namespace NSFile
#else #else
BYTE* pUtf8 = NULL; BYTE* pUtf8 = NULL;
LONG lLen = 0; LONG lLen = 0;
CUtf8Converter::GetUtf8StringFromUnicode(sFileName.c_str(), sFileName.length(), pUtf8, lLen, false); CUtf8Converter::GetUtf8StringFromUnicode(sFileName.c_str(), sFileName.length(), pUtf8, lLen, false);
m_pFile = fopen((char*)pUtf8, "rb"); m_pFile = fopen((char*)pUtf8, "rb");
delete [] pUtf8; delete [] pUtf8;
#endif #endif
if (NULL == m_pFile) if (NULL == m_pFile)
return false; return false;
fseek(m_pFile, 0, SEEK_END); fseek(m_pFile, 0, SEEK_END);
m_lFileSize = ftell(m_pFile); m_lFileSize = ftell(m_pFile);
fseek(m_pFile, 0, SEEK_SET); fseek(m_pFile, 0, SEEK_SET);
m_lFilePosition = 0; m_lFilePosition = 0;
if (0 < sFileName.length()) if (0 < sFileName.length())
{ {
if (((wchar_t)'/') == sFileName.c_str()[sFileName.length() - 1]) if (((wchar_t)'/') == sFileName.c_str()[sFileName.length() - 1])
m_lFileSize = 0x7FFFFFFF; m_lFileSize = 0x7FFFFFFF;
} }
unsigned int err = 0x7FFFFFFF; unsigned int err = 0x7FFFFFFF;
unsigned int cur = (unsigned int)m_lFileSize; unsigned int cur = (unsigned int)m_lFileSize;
if (err == cur) if (err == cur)
{ {
CloseFile(); CloseFile();
return false; return false;
} }
return true; return true;
} }
...@@ -617,22 +617,22 @@ namespace NSFile ...@@ -617,22 +617,22 @@ namespace NSFile
#else #else
BYTE* pUtf8 = NULL; BYTE* pUtf8 = NULL;
LONG lLen = 0; LONG lLen = 0;
CUtf8Converter::GetUtf8StringFromUnicode(sFileName.c_str(), sFileName.length(), pUtf8, lLen, false); CUtf8Converter::GetUtf8StringFromUnicode(sFileName.c_str(), sFileName.length(), pUtf8, lLen, false);
m_pFile = fopen((char*)pUtf8, "wb"); m_pFile = fopen((char*)pUtf8, "wb");
delete [] pUtf8; delete [] pUtf8;
#endif #endif
if (NULL == m_pFile) if (NULL == m_pFile)
return false; return false;
m_lFilePosition = 0; m_lFilePosition = 0;
return true; return true;
} }
bool CreateTempFile() bool CreateTempFile()
{ {
m_pFile = tmpfile (); m_pFile = tmpfile();
if (NULL == m_pFile) if (NULL == m_pFile)
return false; return false;
m_lFilePosition = 0; m_lFilePosition = 0;
return true; return true;
} }
...@@ -658,7 +658,7 @@ namespace NSFile ...@@ -658,7 +658,7 @@ namespace NSFile
BYTE* pData = NULL; BYTE* pData = NULL;
LONG lLen = 0; LONG lLen = 0;
CUtf8Converter::GetUtf8StringFromUnicode(strXml.c_str(), (LONG)strXml.length(), pData, lLen, bIsBOM); CUtf8Converter::GetUtf8StringFromUnicode(strXml.c_str(), (LONG)strXml.length(), pData, lLen, bIsBOM);
WriteFile(pData, lLen); WriteFile(pData, lLen);
...@@ -670,12 +670,12 @@ namespace NSFile ...@@ -670,12 +670,12 @@ namespace NSFile
nBytesCount = 0; nBytesCount = 0;
bool bRes = false; bool bRes = false;
CFileBinary oFileBinary; CFileBinary oFileBinary;
if(oFileBinary.OpenFile(strFileName)) if (oFileBinary.OpenFile(strFileName))
{ {
long nFileSize = oFileBinary.GetFileSize(); long nFileSize = oFileBinary.GetFileSize();
BYTE* pData = new BYTE[nFileSize]; BYTE* pData = new BYTE[nFileSize];
DWORD dwSizeRead; DWORD dwSizeRead;
if(oFileBinary.ReadFile(pData, nFileSize, dwSizeRead)) if (oFileBinary.ReadFile(pData, nFileSize, dwSizeRead))
{ {
oFileBinary.CloseFile(); oFileBinary.CloseFile();
*ppData = pData; *ppData = pData;
...@@ -692,12 +692,12 @@ namespace NSFile ...@@ -692,12 +692,12 @@ namespace NSFile
bool bRes = false; bool bRes = false;
BYTE* pData = NULL; BYTE* pData = NULL;
DWORD nDataSize; DWORD nDataSize;
if(CFileBinary::ReadAllBytes(strFileName, &pData, nDataSize)) if (CFileBinary::ReadAllBytes(strFileName, &pData, nDataSize))
{ {
//remove BOM if exist //remove BOM if exist
BYTE* pDataStart = pData; BYTE* pDataStart = pData;
int nBOMSize = 3; int nBOMSize = 3;
if(nDataSize > nBOMSize && 0xef == pDataStart[0] && 0xbb == pDataStart[1] && 0xbf == pDataStart[2]) if (nDataSize > nBOMSize && 0xef == pDataStart[0] && 0xbb == pDataStart[1] && 0xbf == pDataStart[2])
{ {
pDataStart += nBOMSize; pDataStart += nBOMSize;
nDataSize -= nBOMSize; nDataSize -= nBOMSize;
...@@ -723,11 +723,11 @@ namespace NSFile ...@@ -723,11 +723,11 @@ namespace NSFile
#else #else
BYTE* pUtf8 = NULL; BYTE* pUtf8 = NULL;
LONG lLen = 0; LONG lLen = 0;
CUtf8Converter::GetUtf8StringFromUnicode(strFileName.c_str(), strFileName.length(), pUtf8, lLen, false); CUtf8Converter::GetUtf8StringFromUnicode(strFileName.c_str(), strFileName.length(), pUtf8, lLen, false);
FILE* pFile = fopen((char*)pUtf8, "rb"); FILE* pFile = fopen((char*)pUtf8, "rb");
delete [] pUtf8; delete [] pUtf8;
#endif #endif
if(NULL != pFile) if (NULL != pFile)
{ {
fclose(pFile); fclose(pFile);
return true; return true;
...@@ -737,7 +737,7 @@ namespace NSFile ...@@ -737,7 +737,7 @@ namespace NSFile
} }
static bool Copy(const std::wstring& strSrc, const std::wstring& strDst) static bool Copy(const std::wstring& strSrc, const std::wstring& strDst)
{ {
if(strSrc == strDst) if (strSrc == strDst)
return true; return true;
#if defined(_WIN32) || defined(_WIN32_WCE) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN32_WCE) || defined(_WIN64)
std::wifstream src(strSrc.c_str(), std::ios::binary); std::wifstream src(strSrc.c_str(), std::ios::binary);
...@@ -745,7 +745,7 @@ namespace NSFile ...@@ -745,7 +745,7 @@ namespace NSFile
#else #else
BYTE* pUtf8Src = NULL; BYTE* pUtf8Src = NULL;
LONG lLenSrc = 0; LONG lLenSrc = 0;
CUtf8Converter::GetUtf8StringFromUnicode(strSrc.c_str(), strSrc.length(), pUtf8Src, lLenSrc, false); CUtf8Converter::GetUtf8StringFromUnicode(strSrc.c_str(), strSrc.length(), pUtf8Src, lLenSrc, false);
BYTE* pUtf8Dst = NULL; BYTE* pUtf8Dst = NULL;
LONG lLenDst = 0; LONG lLenDst = 0;
CUtf8Converter::GetUtf8StringFromUnicode(strDst.c_str(), strDst.length(), pUtf8Dst, lLenDst, false); CUtf8Converter::GetUtf8StringFromUnicode(strDst.c_str(), strDst.length(), pUtf8Dst, lLenDst, false);
...@@ -756,7 +756,7 @@ namespace NSFile ...@@ -756,7 +756,7 @@ namespace NSFile
delete [] pUtf8Src; delete [] pUtf8Src;
delete [] pUtf8Dst; delete [] pUtf8Dst;
#endif #endif
if(src.is_open() && dst.is_open()) if (src.is_open() && dst.is_open())
{ {
dst << src.rdbuf(); dst << src.rdbuf();
src.close(); src.close();
...@@ -773,7 +773,7 @@ namespace NSFile ...@@ -773,7 +773,7 @@ namespace NSFile
#else #else
BYTE* pUtf8 = NULL; BYTE* pUtf8 = NULL;
LONG lLen = 0; LONG lLen = 0;
CUtf8Converter::GetUtf8StringFromUnicode(strFileName.c_str(), strFileName.length(), pUtf8, lLen, false); CUtf8Converter::GetUtf8StringFromUnicode(strFileName.c_str(), strFileName.length(), pUtf8, lLen, false);
int nRes = std::remove((char*)pUtf8); int nRes = std::remove((char*)pUtf8);
delete [] pUtf8; delete [] pUtf8;
#endif #endif
...@@ -781,18 +781,18 @@ namespace NSFile ...@@ -781,18 +781,18 @@ namespace NSFile
} }
static bool Move(const std::wstring& strSrc, const std::wstring& strDst) static bool Move(const std::wstring& strSrc, const std::wstring& strDst)
{ {
if(strSrc == strDst) if (strSrc == strDst)
return true; return true;
if(Copy(strSrc, strDst)) if (Copy(strSrc, strDst))
if(Remove(strSrc)) if (Remove(strSrc))
return true; return true;
return false; return false;
} }
static std::wstring GetTempPath() static std::wstring GetTempPath()
{ {
#if defined(_WIN32) || defined(_WIN32_WCE) || defined(_WIN64) #if defined(_WIN32) || defined(_WIN32_WCE) || defined(_WIN64)
wchar_t pBuffer [MAX_PATH + 1]; wchar_t pBuffer[MAX_PATH + 1];
memset(pBuffer, 0, sizeof(wchar_t) * (MAX_PATH + 1)); memset(pBuffer, 0, sizeof(wchar_t) * (MAX_PATH + 1));
::GetTempPathW(MAX_PATH, pBuffer); ::GetTempPathW(MAX_PATH, pBuffer);
...@@ -819,7 +819,7 @@ namespace NSFile ...@@ -819,7 +819,7 @@ namespace NSFile
if (NULL == folder) if (NULL == folder)
folder = "/tmp"; folder = "/tmp";
return NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)folder, strlen(folder)); return NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)folder, strlen(folder));
#endif #endif
} }
static std::wstring CreateTempFileWithUniqueName(const std::wstring& strFolderPathRoot, const std::wstring& Prefix) static std::wstring CreateTempFileWithUniqueName(const std::wstring& strFolderPathRoot, const std::wstring& Prefix)
...@@ -844,6 +844,76 @@ namespace NSFile ...@@ -844,6 +844,76 @@ namespace NSFile
return NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)sRes.c_str(), sRes.length()); return NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)sRes.c_str(), sRes.length());
#endif #endif
} }
static bool OpenTempFile(std::wstring *pwsName, FILE **ppFile, wchar_t *wsMode, wchar_t *wsExt, wchar_t *wsFolder, wchar_t* wsName = NULL)
{
// TODO: Реализовать когда wsName != NULL
std::wstring wsTemp, wsFileName;
FILE *pTempFile = NULL;
#if defined(_WIN32) || defined (_WIN64)
wchar_t *wsTempDir;
if ((wsTempDir = _wgetenv(L"TEMP")) && (wsFolder == NULL))
{
wsTemp = std::wstring(wsTempDir);
#else
char *wsTempDirA;
if ((wsTempDirA = getenv("TEMP")) && (wsFolder == NULL))
{
std::wstring wsTempDir = NSFile::CUtf8Converter::GetUnicodeStringFromUTF8((BYTE*)wsTempDirA, strlen(wsTempDirA));
wsTemp = wsTempDir.c_str();
#endif
wsTemp.append(L"/");
}
else if (wsFolder != NULL)
{
wsTemp = std::wstring(wsFolder);
wsTemp.append(L"/");
}
else
{
wsTemp = L"";
}
wsTemp.append(L"x");
int nTime = (int)time(NULL);
for (int nIndex = 0; nIndex < 1000; ++nIndex)
{
wsFileName = wsTemp;
#if defined(_WIN32) || defined (_WIN64)
wchar_t buff[32] ={};
_itow(nTime + nIndex, buff, 10);
wsFileName.append(buff, wcslen(buff));
#else
wsFileName.append(std::to_wstring(nTime + nIndex));
#endif
if (wsExt)
{
wsFileName.append(wsExt);
}
#if defined (_WIN32) || defined (_WIN64)
if (!(pTempFile = _wfopen(wsFileName.c_str(), L"r")))
{
if (!(pTempFile = _wfopen(wsFileName.c_str(), wsMode)))
#else
std::string sFileName = U_TO_UTF8(wsFileName);
if (!(pTempFile = fopen(sFileName.c_str(), "r")))
{
std::wstring strMode(wsMode);
std::string sMode = U_TO_UTF8(strMode);
if (!(pTempFile = fopen(sFileName.c_str(), sMode.c_str())))
#endif
{
return FALSE;
}
*pwsName = wsFileName;
*ppFile = pTempFile;
return TRUE;
}
fclose(pTempFile);
}
return FALSE;
}
}; };
class CBase64Converter class CBase64Converter
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment