From 16f738ecee689c6feb2acb7e4ef4d9bb4144ae7d Mon Sep 17 00:00:00 2001 From: Tomas Bzatek Date: Sun, 8 Jun 2008 11:04:43 +0200 Subject: Initial commit --- zip/ZipArchive/ZipPlatformComm.cpp | 94 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 zip/ZipArchive/ZipPlatformComm.cpp (limited to 'zip/ZipArchive/ZipPlatformComm.cpp') diff --git a/zip/ZipArchive/ZipPlatformComm.cpp b/zip/ZipArchive/ZipPlatformComm.cpp new file mode 100644 index 0000000..62469e2 --- /dev/null +++ b/zip/ZipArchive/ZipPlatformComm.cpp @@ -0,0 +1,94 @@ +//////////////////////////////////////////////////////////////////////////////// +// This source file is part of the ZipArchive library source distribution and +// is Copyrighted 2000 - 2007 by Artpol Software - Tadeusz Dracz +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// For the licensing details refer to the License.txt file. +// +// Web Site: http://www.artpol-software.com +//////////////////////////////////////////////////////////////////////////////// + +#include "stdafx.h" +#include "ZipFile.h" +#include "ZipPlatform.h" +#include "ZipException.h" + +using namespace ZipPlatform; + +bool ZipPlatform::DirectoryExists(LPCTSTR lpszDir) +{ + CZipString sz; + if (!GetCurrentDirectory(sz)) + return false; + if (!ChangeDirectory(lpszDir)) + return false; + ChangeDirectory(sz); + return true; +} + +bool ZipPlatform::ForceDirectory(LPCTSTR lpDirectory) +{ + ASSERT(lpDirectory); + CZipString szDirectory = lpDirectory; + szDirectory.TrimRight(CZipPathComponent::m_cSeparator); + CZipPathComponent zpc(szDirectory); + if ((zpc.GetFilePath().Compare((LPCTSTR)szDirectory)) == 0 || + (FileExists(szDirectory) == -1)) + return true; + if (!ForceDirectory(zpc.GetFilePath())) + return false; + if (!CreateDirectory(szDirectory)) + return false; + return true; +} + +bool ZipPlatform::GetFileSize(LPCTSTR lpszFileName, ZIP_SIZE_TYPE& dSize) +{ + CZipFile f; + if (!f.Open(lpszFileName, CZipFile::modeRead | CZipFile::shareDenyWrite, false)) + return false; + bool ret; + try + { + ZIP_FILE_USIZE size = f.GetLength(); + // the file may be too large if zip64 is not enabled + ret = size <= ZIP_SIZE_TYPE(-1); + if (ret) + dSize = (ZIP_SIZE_TYPE)size; + } +#ifdef ZIP_ARCHIVE_MFC + catch(CZipBaseException* e) + { + e->Delete(); + ret = false; + } +#else + catch(CZipBaseException e) + { + ret = false; + } +#endif + + try + { + f.Close(); + } +#ifdef ZIP_ARCHIVE_MFC + catch(CZipBaseException* e) + { + e->Delete(); + } +#else + catch(CZipBaseException e) + { + } +#endif + + return ret; +} + + -- cgit v1.2.3