www.pudn.com > ecc-0.3.16-src.zip > eccFileProperties.cpp
/* ========================================================================== ecc - Erik's Code Collection Copyright (C) 2003-2005 - Erik Dienske This file is part of ecc. ecc 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. ecc is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ecc; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ===========================================================================*/ //--------------------------------------------------------------------------- #include#pragma hdrstop #include "eccFileProperties.h" #include "eccFile.h" //--------------------------------------------------------------------------- #pragma package(smart_init) //--------------------------------------------------------------------------- //=========================================================================== namespace ecc { //=========================================================================== //--------------------------------------------------------------------------- TFileProperties::TFileProperties() { FInitialized = false; } //--------------------------------------------------------------------------- TFileProperties::TFileProperties(String fname) { GetFileProps(fname); } //--------------------------------------------------------------------------- bool TFileProperties::GetFileProps(const String fname) { FName = fname; FError = false; FErrorMessage = ""; FInitialized = false; // Get file handle: WIN32_FIND_DATA fi; ZeroMemory(&fi, sizeof(fi)); FHandle = FindFirstFile(fname.c_str(), &fi); if (FHandle == INVALID_HANDLE_VALUE) { FError = true; FErrorMessage = __FILE__ ": CreateFile() failed. Line: " + IntToStr(__LINE__) + ". Func: " __FUNC__; FInitialized = false; return false; } // Set file attributes: SetFileAttributes(fi); // Get file size: SetFileSize(fi); // Get file date/time: SetFileDateTime(fi); // Close file handle: FindClose(FHandle); FHandle = NULL; FInitialized = true; return true; } //--------------------------------------------------------------------------- String TFileProperties::GetAttributeStr() const { String str; str += FArchive ? "A" : ""; str += FCompressed ? "C" : ""; str += FHidden ? "H" : ""; str += FReadOnly ? "R" : ""; str += FSystem ? "S" : ""; str += FTemporary ? "T" : ""; return str; } //--------------------------------------------------------------------------- void TFileProperties::SetFileAttributes(const WIN32_FIND_DATA &fi) { FArchive = fi.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE; FCompressed = fi.dwFileAttributes & FILE_ATTRIBUTE_COMPRESSED; FHidden = fi.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN; FReadOnly = fi.dwFileAttributes & FILE_ATTRIBUTE_READONLY; FSystem = fi.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM; FTemporary = fi.dwFileAttributes & FILE_ATTRIBUTE_TEMPORARY; FDir = fi.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY; FdwFileAttributes = fi.dwFileAttributes; } //--------------------------------------------------------------------------- void TFileProperties::SetFileSize(const WIN32_FIND_DATA &fi) { // Helper union: union { struct { unsigned int lo; unsigned int hi; }; unsigned long size; } u_size; u_size.hi = fi.nFileSizeHigh; u_size.lo = fi.nFileSizeLow; FSize = u_size.size; } //--------------------------------------------------------------------------- void TFileProperties::SetFileDateTime(const WIN32_FIND_DATA &fi) { // Get file times: FCreationTime = FILETIMEToTDateTime(fi.ftCreationTime); FLastAccessTime = FILETIMEToTDateTime(fi.ftLastAccessTime); FLastWriteTime = FILETIMEToTDateTime(fi.ftLastWriteTime); } //--------------------------------------------------------------------------- String TFileProperties::GetHumanSize() { return FloatToHumanFileSize(FSize); } //--------------------------------------------------------------------------- String TFileProperties::GetCreationTimeStr() const { return FCreationTime.DateTimeString(); } //--------------------------------------------------------------------------- String TFileProperties::GetLastAccessTimeStr() const { return FLastAccessTime.DateTimeString(); } //--------------------------------------------------------------------------- String TFileProperties::GetLastWriteTimeStr() const { return FLastWriteTime.DateTimeString(); } //--------------------------------------------------------------------------- //=========================================================================== } // namespace ecc; //===========================================================================