2 Copyright (c) 2008-2009 TrueCrypt Developers Association. All rights reserved.
4 Governed by the TrueCrypt License 3.0 the full text of which is contained in
5 the file License.txt included in TrueCrypt binary and source code distribution
9 #ifndef TC_HEADER_Platform_File
10 #define TC_HEADER_Platform_File
12 #include "PlatformBase.h"
14 #include "FilesystemPath.h"
15 #include "SystemException.h"
36 ShareReadWriteIgnoreLock
43 PreserveTimestamps = 1 << 0,
44 DisableWriteCaching = 1 << 1
48 typedef FILE* SystemFileHandleType;
50 typedef int SystemFileHandleType;
53 File () : FileIsOpen (false), SharedHandle (false) { }
56 void AssignSystemHandle (SystemFileHandleType openFileHandle, bool sharedHandle = true)
60 FileHandle = openFileHandle;
62 SharedHandle = sharedHandle;
66 static void Copy (const FilePath &sourcePath, const FilePath &destinationPath, bool preserveTimestamps = true);
69 uint32 GetDeviceSectorSize () const;
70 static size_t GetOptimalReadSize () { return OptimalReadSize; }
71 static size_t GetOptimalWriteSize () { return OptimalWriteSize; }
72 uint64 GetPartitionDeviceStartOffset () const;
73 bool IsOpen () const { return FileIsOpen; }
74 FilePath GetPath () const;
75 uint64 Length () const;
76 void Open (const FilePath &path, FileOpenMode mode = OpenRead, FileShareMode shareMode = ShareReadWrite, FileOpenFlags flags = FlagsNone);
77 uint64 Read (const BufferPtr &buffer) const;
78 void ReadCompleteBuffer (const BufferPtr &buffer) const;
79 uint64 ReadAt (const BufferPtr &buffer, uint64 position) const;
80 void SeekAt (uint64 position) const;
81 void SeekEnd (int ofset) const;
82 void Write (const ConstBufferPtr &buffer) const;
83 void Write (const ConstBufferPtr &buffer, size_t length) const { Write (buffer.GetRange (0, length)); }
84 void WriteAt (const ConstBufferPtr &buffer, uint64 position) const;
87 void ValidateState () const;
89 static const size_t OptimalReadSize = 256 * 1024;
90 static const size_t OptimalWriteSize = 256 * 1024;
93 FileOpenFlags mFileOpenFlags;
96 SystemFileHandleType FileHandle;
106 File &operator= (const File &);
110 #endif // TC_HEADER_Platform_File