Index: src/libchcore/TLocalFilesystemFile.h
===================================================================
diff -u -N -rf8fcbbd1d2321cf0c8be79526c449384af654e49 -r6b927672a652279a203f6465ead20ffb9fe6bde1
--- src/libchcore/TLocalFilesystemFile.h	(.../TLocalFilesystemFile.h)	(revision f8fcbbd1d2321cf0c8be79526c449384af654e49)
+++ src/libchcore/TLocalFilesystemFile.h	(.../TLocalFilesystemFile.h)	(revision 6b927672a652279a203f6465ead20ffb9fe6bde1)
@@ -34,7 +34,6 @@
 	public:
 		virtual ~TLocalFilesystemFile();
 
-		virtual void OpenExistingForReading() override;
 		virtual void CreateNewForWriting() override;
 		virtual void OpenExistingForWriting() override;
 
@@ -45,17 +44,21 @@
 		virtual void FinalizeFile(TOverlappedDataBuffer& rBuffer) override;
 
 		virtual bool IsOpen() const  override { return m_hFile != INVALID_HANDLE_VALUE; }
-		virtual file_size_t GetFileSize() const override;
-		virtual void GetFileInfo(TFileInfo& tFileInfo) const override;
+		virtual file_size_t GetFileSize() override;
+		virtual void GetFileInfo(TFileInfo& tFileInfo) override;
 
 		virtual TSmartPath GetFilePath() const override;
 
 		virtual void Close() override;
 		virtual file_size_t GetSeekPositionForResume(file_size_t fsLastAvailablePosition) override;
 
 	private:
-		TLocalFilesystemFile(const TSmartPath& pathFile, bool bNoBuffering, const logger::TLogFileDataPtr& spLogFileData);
+		TLocalFilesystemFile(EOpenMode eMode, const TSmartPath& pathFile, bool bNoBuffering, const logger::TLogFileDataPtr& spLogFileData);
 
+		void EnsureOpen();
+
+		void OpenExistingForReading();
+
 		DWORD GetFlagsAndAttributes(bool bNoBuffering) const;
 		void OpenExistingForWriting(bool bNoBuffering);
 
@@ -66,6 +69,7 @@
 	private:
 		TSmartPath m_pathFile;
 		HANDLE m_hFile;
+		EOpenMode m_eMode;
 		bool m_bNoBuffering;
 #pragma warning(push)
 #pragma warning(disable: 4251)