C++程序  |  90行  |  2.47 KB

/**
 * @file file_manip.h
 * Useful file management helpers
 *
 * @remark Copyright 2002 OProfile authors
 * @remark Read the file COPYING
 *
 * @author Philippe Elie
 * @author John Levon
 */

#ifndef FILE_MANIP_H
#define FILE_MANIP_H

#include <string>
#include <list>


/**
 * copy_file - copy a file.
 * @param source        filename to copy from
 * @param destination   filename to copy into
 *
 * the last modification time of the source file is preserved, file attribute
 * and owner are preserved if possible. Return true if copying successful.
 */
bool copy_file(std::string const & source, std::string const & destination);

/// return true if dir is an existing directory
bool is_directory(std::string const & dirname);

/**
 * is_file_identical - check for identical files
 * @param file1  first filename
 * @param file2  second filename
 *
 * return true if the two filenames belong to the same file
 */
bool is_files_identical(std::string const & file1, std::string const & file2);

/**
 * op_realpath - resolve symlinks etc.
 * Resolve a path as much as possible. Accounts for relative
 * paths (from cwd), ".." and ".". For success, the target
 * file must exist !
 *
 * Resolve a symbolic link as far as possible.
 * Returns the original string on failure.
 */
std::string const op_realpath(std::string const & name);

/// return true if the given file is readable
bool op_file_readable(std::string const & file);

/**
 * @param file_list where to store result
 * @param base_dir directory from where lookup start
 * @param filter a filename filter
 * @param recursive if true lookup in sub-directory
 *
 * create a filelist under base_dir, filtered by filter and optionally
 * looking in sub-directory. If we look in sub-directory only sub-directory
 * which match filter are traversed.
 */
bool create_file_list(std::list<std::string> & file_list,
		      std::string const & base_dir,
		      std::string const & filter = "*",
		      bool recursive = false);

/**
 * op_dirname - get the path component of a filename
 * @param file_name  filename
 *
 * Returns the path name of a filename with trailing '/' removed.
 */
std::string op_dirname(std::string const & file_name);

/**
 * op_basename - get the basename of a path
 * @param path_name  path
 *
 * Returns the basename of a path with trailing '/' removed.
 *
 * Always use this instead of the C basename() - header order
 * can affect behaviour  for basename("/")
 */
std::string op_basename(std::string const & path_name);

#endif /* !FILE_MANIP_H */