2006-10-23 17:48:43 +02:00
|
|
|
//
|
|
|
|
// File.h
|
|
|
|
//
|
2009-04-14 12:38:52 +02:00
|
|
|
// $Id: //poco/Main/Foundation/include/Poco/File.h#9 $
|
2006-10-23 17:48:43 +02:00
|
|
|
//
|
|
|
|
// Library: Foundation
|
|
|
|
// Package: Filesystem
|
|
|
|
// Module: File
|
|
|
|
//
|
|
|
|
// Definition of the File class.
|
|
|
|
//
|
|
|
|
// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
|
|
|
|
// and Contributors.
|
|
|
|
//
|
|
|
|
// Permission is hereby granted, free of charge, to any person or organization
|
|
|
|
// obtaining a copy of the software and accompanying documentation covered by
|
|
|
|
// this license (the "Software") to use, reproduce, display, distribute,
|
|
|
|
// execute, and transmit the Software, and to prepare derivative works of the
|
|
|
|
// Software, and to permit third-parties to whom the Software is furnished to
|
|
|
|
// do so, all subject to the following:
|
|
|
|
//
|
|
|
|
// The copyright notices in the Software and this entire statement, including
|
|
|
|
// the above license grant, this restriction and the following disclaimer,
|
|
|
|
// must be included in all copies of the Software, in whole or in part, and
|
|
|
|
// all derivative works of the Software, unless such copies or derivative
|
|
|
|
// works are solely in the form of machine-executable object code generated by
|
|
|
|
// a source language processor.
|
|
|
|
//
|
|
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
|
|
|
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
|
|
|
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
|
|
|
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
|
// DEALINGS IN THE SOFTWARE.
|
|
|
|
//
|
|
|
|
|
|
|
|
|
|
|
|
#ifndef Foundation_File_INCLUDED
|
|
|
|
#define Foundation_File_INCLUDED
|
|
|
|
|
|
|
|
|
|
|
|
#include "Poco/Foundation.h"
|
|
|
|
#include "Poco/Timestamp.h"
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
|
|
|
|
#if defined(POCO_OS_FAMILY_WINDOWS) && defined(POCO_WIN32_UTF8)
|
2011-08-22 19:02:25 +02:00
|
|
|
#if defined(_WIN32_WCE)
|
|
|
|
#include "File_WINCE.h"
|
|
|
|
#else
|
2006-10-23 17:48:43 +02:00
|
|
|
#include "Poco/File_WIN32U.h"
|
2011-08-22 19:02:25 +02:00
|
|
|
#endif
|
2006-10-23 17:48:43 +02:00
|
|
|
#elif defined(POCO_OS_FAMILY_WINDOWS)
|
|
|
|
#include "Poco/File_WIN32.h"
|
2011-08-22 19:02:25 +02:00
|
|
|
#elif defined(POCO_VXWORKS)
|
|
|
|
#include "Poco/File_VX.h"
|
2006-10-23 17:48:43 +02:00
|
|
|
#elif defined(POCO_OS_FAMILY_UNIX)
|
|
|
|
#include "Poco/File_UNIX.h"
|
|
|
|
#else
|
|
|
|
#include "Poco/File_VMS.h"
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
namespace Poco {
|
|
|
|
|
|
|
|
|
|
|
|
class Path;
|
|
|
|
|
|
|
|
|
|
|
|
class Foundation_API File: private FileImpl
|
|
|
|
/// The File class provides methods for working with a file.
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
typedef FileSizeImpl FileSize;
|
|
|
|
|
|
|
|
File();
|
|
|
|
/// Creates the file.
|
|
|
|
|
|
|
|
File(const std::string& path);
|
|
|
|
/// Creates the file.
|
|
|
|
|
|
|
|
File(const char* path);
|
|
|
|
/// Creates the file.
|
|
|
|
|
|
|
|
File(const Path& path);
|
|
|
|
/// Creates the file.
|
|
|
|
|
|
|
|
File(const File& file);
|
|
|
|
/// Copy constructor.
|
|
|
|
|
|
|
|
virtual ~File();
|
|
|
|
/// Destroys the file.
|
|
|
|
|
|
|
|
File& operator = (const File& file);
|
|
|
|
/// Assignment operator.
|
|
|
|
|
|
|
|
File& operator = (const std::string& path);
|
|
|
|
/// Assignment operator.
|
|
|
|
|
|
|
|
File& operator = (const char* path);
|
|
|
|
/// Assignment operator.
|
|
|
|
|
|
|
|
File& operator = (const Path& path);
|
|
|
|
/// Assignment operator.
|
|
|
|
|
|
|
|
void swap(File& file);
|
|
|
|
/// Swaps the file with another one.
|
|
|
|
|
|
|
|
const std::string& path() const;
|
|
|
|
/// Returns the path.
|
|
|
|
|
|
|
|
bool exists() const;
|
|
|
|
/// Returns true iff the file exists.
|
|
|
|
|
|
|
|
bool canRead() const;
|
|
|
|
/// Returns true iff the file is readable.
|
|
|
|
|
|
|
|
bool canWrite() const;
|
|
|
|
/// Returns true iff the file is writeable.
|
2007-04-18 18:22:57 +02:00
|
|
|
|
|
|
|
bool canExecute() const;
|
|
|
|
/// Returns true iff the file is executable.
|
|
|
|
///
|
|
|
|
/// On Windows and OpenVMS, the file must have
|
|
|
|
/// the extension ".EXE" to be executable.
|
|
|
|
/// On Unix platforms, the executable permission
|
|
|
|
/// bit must be set.
|
|
|
|
|
2006-10-23 17:48:43 +02:00
|
|
|
bool isFile() const;
|
|
|
|
/// Returns true iff the file is a regular file.
|
|
|
|
|
|
|
|
bool isLink() const;
|
|
|
|
/// Returns true iff the file is a symbolic link.
|
|
|
|
|
|
|
|
bool isDirectory() const;
|
|
|
|
/// Returns true iff the file is a directory.
|
2009-04-14 12:38:52 +02:00
|
|
|
|
|
|
|
bool isDevice() const;
|
|
|
|
/// Returns true iff the file is a device.
|
2008-01-28 18:23:19 +01:00
|
|
|
|
|
|
|
bool isHidden() const;
|
|
|
|
/// Returns true if the file is hidden.
|
|
|
|
///
|
|
|
|
/// On Windows platforms, the file's hidden
|
|
|
|
/// attribute is set for this to be true.
|
|
|
|
///
|
|
|
|
/// On Unix platforms, the file name must
|
|
|
|
/// begin with a period for this to be true.
|
|
|
|
|
2006-10-23 17:48:43 +02:00
|
|
|
Timestamp created() const;
|
|
|
|
/// Returns the creation date of the file.
|
2008-09-18 17:49:05 +02:00
|
|
|
///
|
|
|
|
/// Not all platforms or filesystems (e.g. Linux and most Unix
|
|
|
|
/// platforms with the exception of FreeBSD and Mac OS X)
|
|
|
|
/// maintain the creation date of a file.
|
|
|
|
/// On such platforms, created() returns
|
|
|
|
/// the time of the last inode modification.
|
2006-10-23 17:48:43 +02:00
|
|
|
|
2011-09-15 10:31:51 +02:00
|
|
|
Timestamp getLastModified() const;
|
|
|
|
/// Returns the modification date of the file.
|
|
|
|
|
|
|
|
File& setLastModified(const Timestamp& ts);
|
|
|
|
/// Sets the modification date of the file.
|
|
|
|
|
|
|
|
FileSize getSize() const;
|
|
|
|
/// Returns the size of the file in bytes.
|
|
|
|
|
|
|
|
File& setSize(FileSize size);
|
|
|
|
/// Sets the size of the file in bytes. Can be used
|
|
|
|
/// to truncate a file.
|
|
|
|
|
|
|
|
File& setWriteable(bool flag = true);
|
|
|
|
/// Makes the file writeable (if flag is true), or
|
|
|
|
/// non-writeable (if flag is false) by setting the
|
|
|
|
/// file's flags in the filesystem accordingly.
|
|
|
|
|
|
|
|
File& setReadOnly(bool flag = true);
|
|
|
|
/// Makes the file non-writeable (if flag is true), or
|
|
|
|
/// writeable (if flag is false) by setting the
|
|
|
|
/// file's flags in the filesystem accordingly.
|
|
|
|
|
|
|
|
File& setExecutable(bool flag = true);
|
|
|
|
/// Makes the file executable (if flag is true), or
|
|
|
|
/// non-executable (if flag is false) by setting
|
|
|
|
/// the file's permission bits accordingly.
|
2007-04-18 18:22:57 +02:00
|
|
|
///
|
|
|
|
/// Does nothing on Windows and OpenVMS.
|
|
|
|
|
2006-10-23 17:48:43 +02:00
|
|
|
void copyTo(const std::string& path) const;
|
2007-04-25 10:39:02 +02:00
|
|
|
/// Copies the file (or directory) to the given path.
|
|
|
|
/// The target path can be a directory.
|
|
|
|
///
|
|
|
|
/// A directory is copied recursively.
|
2006-10-23 17:48:43 +02:00
|
|
|
|
|
|
|
void moveTo(const std::string& path);
|
2007-04-25 10:39:02 +02:00
|
|
|
/// Copies the file (or directory) to the given path and
|
|
|
|
/// removes the original file. The target path can be a directory.
|
2006-10-23 17:48:43 +02:00
|
|
|
|
|
|
|
void renameTo(const std::string& path);
|
|
|
|
/// Renames the file to the new name.
|
|
|
|
|
|
|
|
void remove(bool recursive = false);
|
|
|
|
/// Deletes the file. If recursive is true and the
|
|
|
|
/// file is a directory, recursively deletes all
|
|
|
|
/// files in the directory.
|
|
|
|
|
|
|
|
bool createFile();
|
|
|
|
/// Creates a new, empty file in an atomic operation.
|
|
|
|
/// Returns true if the file has been created and false
|
|
|
|
/// if the file already exists. Throws an exception if
|
|
|
|
/// an error occurs.
|
|
|
|
|
|
|
|
bool createDirectory();
|
|
|
|
/// Creates a directory. Returns true if the directory
|
|
|
|
/// has been created and false if it already exists.
|
|
|
|
/// Throws an exception if an error occurs.
|
|
|
|
|
|
|
|
void createDirectories();
|
|
|
|
/// Creates a directory (and all parent directories
|
|
|
|
/// if necessary).
|
|
|
|
|
|
|
|
void list(std::vector<std::string>& files) const;
|
|
|
|
/// Fills the vector with the names of all
|
|
|
|
/// files in the directory.
|
|
|
|
|
|
|
|
void list(std::vector<File>& files) const;
|
|
|
|
/// Fills the vector with the names of all
|
|
|
|
/// files in the directory.
|
|
|
|
|
|
|
|
bool operator == (const File& file) const;
|
|
|
|
bool operator != (const File& file) const;
|
|
|
|
bool operator < (const File& file) const;
|
|
|
|
bool operator <= (const File& file) const;
|
|
|
|
bool operator > (const File& file) const;
|
|
|
|
bool operator >= (const File& file) const;
|
2007-04-18 18:22:57 +02:00
|
|
|
|
|
|
|
static void handleLastError(const std::string& path);
|
|
|
|
/// For internal use only. Throws an appropriate
|
|
|
|
/// exception for the last file-related error.
|
2007-04-25 10:39:02 +02:00
|
|
|
|
|
|
|
protected:
|
|
|
|
void copyDirectory(const std::string& path) const;
|
|
|
|
/// Copies a directory. Used internally by copyTo().
|
2006-10-23 17:48:43 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// inlines
|
|
|
|
//
|
|
|
|
inline const std::string& File::path() const
|
|
|
|
{
|
|
|
|
return getPathImpl();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool File::operator == (const File& file) const
|
|
|
|
{
|
|
|
|
return getPathImpl() == file.getPathImpl();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool File::operator != (const File& file) const
|
|
|
|
{
|
|
|
|
return getPathImpl() != file.getPathImpl();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool File::operator < (const File& file) const
|
|
|
|
{
|
|
|
|
return getPathImpl() < file.getPathImpl();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool File::operator <= (const File& file) const
|
|
|
|
{
|
|
|
|
return getPathImpl() <= file.getPathImpl();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool File::operator > (const File& file) const
|
|
|
|
{
|
|
|
|
return getPathImpl() > file.getPathImpl();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline bool File::operator >= (const File& file) const
|
|
|
|
{
|
|
|
|
return getPathImpl() >= file.getPathImpl();
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
inline void swap(File& f1, File& f2)
|
|
|
|
{
|
|
|
|
f1.swap(f2);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace Poco
|
|
|
|
|
|
|
|
|
|
|
|
#endif // Foundation_File_INCLUDED
|