24#if !defined(BBAFDEB7FCB3409B88E23A547CF822B6)
25#define BBAFDEB7FCB3409B88E23A547CF822B6
27#include <miktex/Core/config.h>
29#if defined(MIKTEX_WINDOWS)
41#include <miktex/Util/OptionSet>
42#include <miktex/Util/PathName>
47#pragma warning( disable : 4996 )
50MIKTEX_CORE_BEGIN_NAMESPACE;
89#if defined(MIKTEX_WINDOWS)
93#if defined(MIKTEX_UNIX)
180 File& operator=(
const File& other) =
delete;
186 File& operator=(
File&& other) =
delete;
246 Move(source, dest, {});
262 Copy(source, dest, { FileCopyOption::ReplaceExisting });
337 return CreateInputStream(path, std::ios_base::in, std::ios_base::badbit);
355 return CreateOutputStream(path, mode, std::ios_base::badbit | std::ios_base::failbit);
364 return CreateOutputStream(path, std::ios_base::out, std::ios_base::badbit | std::ios_base::failbit);
387 static MIKTEXCORECEEAPI(
void)
SetTimes(
int fd, time_t creationTime, time_t lastAccessTime, time_t lastWriteTime);
395 static MIKTEXCORECEEAPI(
void)
SetTimes(FILE* file, time_t creationTime, time_t lastAccessTime, time_t lastWriteTime);
422 time_t lastAccessTime;
423 time_t lastWriteTime;
424 GetTimes(path, creationTime, lastAccessTime, lastWriteTime);
425 return lastWriteTime;
456 static MIKTEXCORECEEAPI(
bool)
TryLock(
int fd,
LockType lockType, std::chrono::milliseconds timeout);
466 return TryLock(fileno(file), lockType, timeout);
469#if defined(MIKTEX_WINDOWS)
476 static MIKTEXCORECEEAPI(
bool)
TryLock(HANDLE hFile,
LockType lockType, std::chrono::milliseconds timeout);
482 static MIKTEXCORECEEAPI(
void)
Unlock(
int fd);
489 Unlock(fileno(file));
492#if defined(MIKTEX_WINDOWS)
496 static MIKTEXCORECEEAPI(
void)
Unlock(HANDLE hFile);
500MIKTEX_CORE_END_NAMESPACE;
Directory class.
Definition: Directory.h:55
static void Copy(const MiKTeX::Util::PathName &source, const MiKTeX::Util::PathName &dest)
Definition: File.h:260
static void SetAttributes(const MiKTeX::Util::PathName &path, FileAttributeSet attributes)
static void SetNativeAttributes(const MiKTeX::Util::PathName &path, unsigned long nativeAttributes)
static bool Equals(const MiKTeX::Util::PathName &path1, const MiKTeX::Util::PathName &path2)
static bool IsSymbolicLink(const MiKTeX::Util::PathName &path)
static FILE * Open(const MiKTeX::Util::PathName &path, FileMode mode, FileAccess access, bool isTextFile, FileOpenOptionSet options)
static std::ofstream CreateOutputStream(const MiKTeX::Util::PathName &path)
Definition: File.h:362
static void SetTimes(const MiKTeX::Util::PathName &path, time_t creationTime, time_t lastAccessTime, time_t lastWriteTime)
static void GetTimes(const MiKTeX::Util::PathName &path, time_t &creationTime, time_t &lastAccessTime, time_t &lastWriteTime)
static FileAttributeSet GetAttributes(const MiKTeX::Util::PathName &path)
static size_t SetMaxOpen(size_t newMax)
static void Move(const MiKTeX::Util::PathName &source, const MiKTeX::Util::PathName &dest, FileMoveOptionSet option)
static std::ofstream CreateOutputStream(const MiKTeX::Util::PathName &path, std::ios_base::openmode mode)
Definition: File.h:353
LockType
File lock type.
Definition: File.h:443
static void Move(const MiKTeX::Util::PathName &source, const MiKTeX::Util::PathName &dest)
Definition: File.h:244
static void SetTimes(FILE *file, time_t creationTime, time_t lastAccessTime, time_t lastWriteTime)
static void Delete(const MiKTeX::Util::PathName &path)
static std::ofstream CreateOutputStream(const MiKTeX::Util::PathName &path, std::ios_base::openmode mode, std::ios_base::iostate exceptions)
static void Copy(const MiKTeX::Util::PathName &source, const MiKTeX::Util::PathName &dest, FileCopyOptionSet options)
static bool TryLock(int fd, LockType lockType, std::chrono::milliseconds timeout)
static void Unlock(HANDLE hFile)
static void SetTimes(int fd, time_t creationTime, time_t lastAccessTime, time_t lastWriteTime)
static std::ifstream CreateInputStream(const MiKTeX::Util::PathName &path, std::ios_base::openmode mode, std::ios_base::iostate exceptions)
static void WriteBytes(const MiKTeX::Util::PathName &path, const std::vector< unsigned char > &data)
static FILE * Open(const MiKTeX::Util::PathName &path, FileMode mode, FileAccess access)
static std::vector< unsigned char > ReadAllBytes(const MiKTeX::Util::PathName &path)
static std::ifstream CreateInputStream(const MiKTeX::Util::PathName &path)
Definition: File.h:335
static void Delete(const MiKTeX::Util::PathName &path, FileDeleteOptionSet options)
static time_t GetLastWriteTime(const MiKTeX::Util::PathName &path)
Definition: File.h:419
static MiKTeX::Util::PathName ReadSymbolicLink(const MiKTeX::Util::PathName &path)
static void Unlock(FILE *file)
Definition: File.h:487
static bool TryLock(HANDLE hFile, LockType lockType, std::chrono::milliseconds timeout)
static void CreateLink(const MiKTeX::Util::PathName &oldName, const MiKTeX::Util::PathName &newName, CreateLinkOptionSet options)
static bool Exists(const MiKTeX::Util::PathName &path)
static unsigned long GetNativeAttributes(const MiKTeX::Util::PathName &path)
static std::size_t GetSize(const MiKTeX::Util::PathName &path)
static void Unlock(int fd)
static bool Exists(const MiKTeX::Util::PathName &path, FileExistsOptionSet options)
static FILE * Open(const MiKTeX::Util::PathName &path, FileMode mode, FileAccess access, bool isTextFile)
static bool TryLock(FILE *file, LockType lockType, std::chrono::milliseconds timeout)
Definition: File.h:464
Definition: OptionSet.h:37
Instances of this class can be used to store path names.
Definition: PathName.h:73
FileAccess
File access options.
Definition: File.h:72
@ ReadWrite
Read/Write access.
FileExistsOption
Options for checking file existance.
Definition: File.h:161
@ SymbolicLink
Follow symbolic links.
FileMoveOption
Options for renaming (moving) a file.
Definition: File.h:124
FileMode
How to open a file.
Definition: File.h:54
@ CreateNew
The file will be created. Raise an error, if the file already exists.
@ Create
The file will be created, if it doesn't already exist.
@ Open
Open an existing file.
@ Command
Execute a command and create a pipe.
FileOpenOption
Options for opening a file.
Definition: File.h:103
@ DeleteOnClose
Delete the file when it is closed.
FileCopyOption
Options for copying a file.
Definition: File.h:135
CreateLinkOption
Options for creating a link.
Definition: File.h:148
@ Symbolic
Indicates wheter this is a symbolic link or a hard link.
@ ReplaceExisting
Replace an existing directory.
@ UpdateFndb
Update the file name database.
@ PreserveMode
Preserve mode.
FileAttribute
File attributes.
Definition: File.h:84
@ ReadOnly
File is read-only.
@ Executable
File is executable.
FileDeleteOption
Options for deleting a file.
Definition: File.h:113
@ TryHard
Try hard to make the file go away.