Foxit PDF SDK

fx_stream.h
浏览该文件的文档.
1
15 //<<<+++OPENSOURCE
16 //<<<+++OPENSOURCE_LICENSE
17 //<<<+++OPENSOURCE_BEGIN LIC==FOXIT||LIC==GOOGLE
18
24 //<<<+++OPENSOURCE_MUST_BEGIN
25 #ifndef _FX_STREAM_H_
26 #define _FX_STREAM_H_
27
28 #ifndef _FX_MEMORY_H_
29 #include "fx_memory.h"
30 #endif
31 //<<<+++OPENSOURCE_MUST_END
32
33 //*****************************************************************************
34 //* 文件夹访问
35 //*****************************************************************************
36 #if !defined(_FPDFAPI_MINI_) || (defined(_WIN32) && !defined(_FX_NO_WINDOWS_)) || _FXM_PLATFORM_ == _FXM_PLATFORM_LINUX_ || _FX_OS_ == _FX_ANDROID_ || _FXM_PLATFORM_ == _FXM_PLATFORM_APPLE_
37
44 void* FX_OpenFolder(FX_LPCSTR path);
52 void* FX_OpenFolder(FX_LPCWSTR path);
53
64 FX_BOOL FX_GetNextFile(void* handle, CFX_ByteString& filename, FX_BOOL& bFolder, FX_LPCSTR absPath=NULL);
75 FX_BOOL FX_GetNextFile(void* handle, CFX_WideString& filename, FX_BOOL& bFolder, FX_LPCSTR absPath=NULL);
76
84 void FX_CloseFolder(void* handle);
85
91 FX_WCHAR FX_GetFolderSeparator();
92
93 #endif
94
95 #if _FX_OS_ != _FX_EMBEDDED_
96 //<<<+++OPENSOURCE_BEGIN LIC==FOXIT
104 FX_BOOL FX_CreateFolder(FX_LPCSTR path);
112 FX_BOOL FX_CreateFolder(FX_LPCWSTR path);
113
121 FX_BOOL FX_DeleteFolder(FX_LPCSTR path);
129 FX_BOOL FX_DeleteFolder(FX_LPCWSTR path);
130
138 FX_BOOL FX_IsFilePathExist(FX_LPCWSTR path);
139 //<<<+++OPENSOURCE_END
140 #endif
141
142 //*****************************************************************************
143 //* 文件访问
144 //*****************************************************************************
146 FX_DEFINEHANDLE(FX_HFILE)
147
148 //<<<+++OPENSOURCE_MUST_BEGIN LIC==FOXIT
149 #if _FX_OS_ == _FX_WIN32_DESKTOP_ || _FX_OS_ == _FX_WIN32_MOBILE_ || _FX_OS_ == _FX_WIN64_
150 #if defined(_FX_LARGEFILE_SUPPORT_)
151
152 #define _FX_LARGEFILE_USED_
153
155 #define FX_FILESIZE FX_INT64
156 #define FX_GETBYTEOFFSET32(a) ((FX_BYTE)((a>>16)>>16))
157 #define FX_GETBYTEOFFSET40(a) ((FX_BYTE)(((a>>16)>>16)>>8))
158 #define FX_GETBYTEOFFSET48(a) ((FX_BYTE)(((a>>16)>>16)>>16))
159 #define FX_GETBYTEOFFSET56(a) ((FX_BYTE)((((a>>16)>>16)>>16)>>8))
160 #else
161
162 #define FX_FILESIZE FX_INT32
163 #define FX_GETBYTEOFFSET32(a) 0
164 #define FX_GETBYTEOFFSET40(a) 0
165 #define FX_GETBYTEOFFSET48(a) 0
166 #define FX_GETBYTEOFFSET56(a) 0
167 #endif
168 #elif _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_MACOSX_ || _FX_OS_ == _FX_IOS_ || _FX_OS_ == _FX_ANDROID_ || _FX_OS_==_FX_LINUX_EMBEDDED_
169 #if defined(_FX_LARGEFILE_SUPPORT_)
170
171 #define _FX_LARGEFILE_USED_
172
173 #ifndef _LARGEFILE_SOURCE
174 #define _LARGEFILE_SOURCE
175 #endif
176 #ifndef _LARGEFILE64_SOURCE
177 #define _LARGEFILE64_SOURCE
178 #endif
179 #endif
180 #if defined(_FX_LARGEFILE_SUPPORT_)
181 #define FX_GETBYTEOFFSET32(a) ((FX_BYTE)((a>>16)>>16))
182 #define FX_GETBYTEOFFSET40(a) ((FX_BYTE)(((a>>16)>>16)>>8))
183 #define FX_GETBYTEOFFSET48(a) ((FX_BYTE)(((a>>16)>>16)>>16))
184 #define FX_GETBYTEOFFSET56(a) ((FX_BYTE)((((a>>16)>>16)>>16)>>8))
185 #else
186 #define FX_GETBYTEOFFSET32(a) 0
187 #define FX_GETBYTEOFFSET40(a) 0
188 #define FX_GETBYTEOFFSET48(a) 0
189 #define FX_GETBYTEOFFSET56(a) 0
190 #endif
191 #include <fcntl.h>
192 #include <unistd.h>
193 #include <sys/stat.h>
194
195 #ifndef O_BINARY
196 #define O_BINARY 0
197 #endif
198 #ifndef O_LARGEFILE
199 #define O_LARGEFILE 0
200 #endif
201
203 #if defined(_FX_LARGEFILE_SUPPORT_)
204 #if _FX_OS_ == _FX_LINUX_DESKTOP_ || _FX_OS_ == _FX_LINUX_EMBEDDED_ || _FX_OS_ == _FX_ANDROID_
205 // mac 和 bsd 始终是 64 位。使用 off_t
206 // Linux 和 Android 使用 off64_t
207 #ifndef _CHROME_PNACL_
208 #define _FX_USE_OFF64_T_
209 #endif
210 #endif
211 #endif
212 #if defined(_FX_USE_OFF64_T_)
213 #define FX_FILESIZE off64_t
214 #elif _FX_OS_ == _FX_LINUX_EMBEDDED_
215 #define FX_FILESIZE FX_INT32
216 #else
217 #ifndef _CHROME_PNACL_
218 #define FX_FILESIZE off_t
219 #else
220 #define FX_FILESIZE FX_INT32
221 #endif
222 #endif
223 #else //不支持大文件。
224
225 #define FX_FILESIZE FX_INT32
226 #define FX_GETBYTEOFFSET32(a) 0
227 #define FX_GETBYTEOFFSET40(a) 0
228 #define FX_GETBYTEOFFSET48(a) 0
229 #define FX_GETBYTEOFFSET56(a) 0
230 #endif
231 //<<<+++OPENSOURCE_MUST_END
232
233 #define FX_GETBYTEOFFSET24(a) ((FX_BYTE)(a>>24))
234 #define FX_GETBYTEOFFSET16(a) ((FX_BYTE)(a>>16))
235 #define FX_GETBYTEOFFSET8(a) ((FX_BYTE)(a>>8))
236 #define FX_GETBYTEOFFSET0(a) ((FX_BYTE)(a))
237
243 #define FX_FILEMODE_Write 0
244
245 #define FX_FILEMODE_ReadOnly 1
246
247 #define FX_FILEMODE_Truncate 2 //
248
260 FX_HFILE FX_File_Open(FX_BSTR fileName, FX_DWORD dwMode, IFX_Allocator* pAllocator = NULL);
271 FX_HFILE FX_File_Open(FX_WSTR fileName, FX_DWORD dwMode, IFX_Allocator* pAllocator = NULL);
280 void FX_File_Close(FX_HFILE hFile, IFX_Allocator* pAllocator = NULL);
281 //<<<+++OPENSOURCE_END
282
290 FX_FILESIZE FX_File_GetSize(FX_HFILE hFile);
298 FX_FILESIZE FX_File_GetPosition(FX_HFILE hFile);
307 FX_FILESIZE FX_File_SetPosition(FX_HFILE hFile, FX_FILESIZE pos);
317 size_t FX_File_Read(FX_HFILE hFile, void* pBuffer, size_t szBuffer);
328 size_t FX_File_ReadPos(FX_HFILE hFile, void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
338 size_t FX_File_Write(FX_HFILE hFile, const void* pBuffer, size_t szBuffer);
349 size_t FX_File_WritePos(FX_HFILE hFile, const void* pBuffer, size_t szBuffer, FX_FILESIZE pos);
357 FX_BOOL FX_File_Flush(FX_HFILE hFile);
366 FX_BOOL FX_File_Truncate(FX_HFILE hFile, FX_FILESIZE szFile);
367
375 FX_BOOL FX_File_Exist(FX_BSTR fileName);
383 FX_BOOL FX_File_Exist(FX_WSTR fileName);
391 FX_BOOL FX_File_Delete(FX_BSTR fileName);
399 FX_BOOL FX_File_Delete(FX_WSTR fileName);
408 FX_BOOL FX_File_Copy(FX_BSTR fileNameSrc, FX_BSTR fileNameDst);
417 FX_BOOL FX_File_Copy(FX_WSTR fileNameSrc, FX_WSTR fileNameDst);
426 FX_BOOL FX_File_Move(FX_BSTR fileNameSrc, FX_BSTR fileNameDst);
435 FX_BOOL FX_File_Move(FX_WSTR fileNameSrc, FX_WSTR fileNameDst);
436
437 //*****************************************************************************
438 //* IFX_StreamWrite/IFX_FileWrite
439 //*****************************************************************************
441 class IFX_StreamWrite
442 {
443 public:
445 virtual void Release() = 0;
446
455 virtual FX_BOOL WriteBlock(const void* pData, size_t size) = 0;
461 virtual FX_BOOL Flush() { return true; }
462
463 #if !defined(__EMSCRIPTEN__) && !defined(SWIGJAVA)
464 protected:
465 #endif
466 virtual ~IFX_StreamWrite() {}
467 };
468
470 class IFX_FileWrite : public IFX_StreamWrite
471 {
472 public:
474 virtual void Release() = 0;
475
481 virtual FX_FILESIZE GetSize() = 0;
487 virtual FX_BOOL Flush() = 0;
497 virtual FX_BOOL WriteBlock(const void* pData, FX_FILESIZE offset, size_t size) = 0;
506 virtual FX_BOOL WriteBlock(const void* pData, size_t size) {return WriteBlock(pData, GetSize(), size);}
507
508 #if !defined(__EMSCRIPTEN__) && !defined(SWIGJAVA)
509 protected:
510 #endif
511 virtual ~IFX_FileWrite() {}
512 };
513
523 IFX_FileWrite* FX_CreateFileWrite(FX_LPCSTR filename, IFX_Allocator* pAllocator = NULL);
524
534 IFX_FileWrite* FX_CreateFileWrite(FX_LPCWSTR filename, IFX_Allocator* pAllocator = NULL);
535 //<<<+++OPENSOURCE_END
536
537 //*****************************************************************************
538 //* IFX_FileRead
539 //*****************************************************************************
541 class IFX_StreamRead
542 {
543 public:
549 virtual void Release() = 0;
550
556 virtual FX_BOOL IsEOF() = 0;
562 virtual FX_FILESIZE GetPosition() = 0;
571 virtual size_t ReadBlock(void* buffer, size_t size) = 0;
572
580 virtual FX_FILESIZE SetPosition(FX_FILESIZE pos) { FXSYS_assert(false && "Unsupport"); return -1; }
581
582 protected:
583 virtual ~IFX_StreamRead() {}
584 };
585
587 class IFX_FileRead : public IFX_StreamRead
588 {
589 public:
595 virtual void Release() = 0;
596
602 virtual FX_FILESIZE GetSize() = 0;
608 virtual FX_BOOL IsEOF() {return false;}
614 virtual FX_FILESIZE GetPosition() {return 0;}
623 virtual FX_BOOL SetRange(FX_FILESIZE offset, FX_FILESIZE size) {return false;}
629 virtual void ClearRange() {}
639 virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;
648 virtual size_t ReadBlock(void* buffer, size_t size) {return 0;}
649
657 virtual FX_FILESIZE SetPosition(FX_FILESIZE pos) { FXSYS_assert(false && "Unsupport"); return -1; }
658
659 #if !defined(__EMSCRIPTEN__) && !defined(SWIGJAVA)
660 protected:
661 #endif
662 virtual ~IFX_FileRead() {}
663 };
664
674 IFX_FileRead* FX_CreateFileRead(FX_LPCSTR filename, IFX_Allocator* pAllocator = NULL);
675
685 IFX_FileRead* FX_CreateFileRead(FX_LPCWSTR filename, IFX_Allocator* pAllocator = NULL);
686 //<<<+++OPENSOURCE_END
687
688 //*****************************************************************************
689 //* IFX_FileStream
690 //*****************************************************************************
692 class IFX_FileStream
693 : public IFX_FileRead, public IFX_FileWrite
694 {
695 public:
701 virtual IFX_FileStream* Retain() = 0;
707 virtual void Release() = 0;
708
714 virtual FX_FILESIZE GetSize() = 0;
720 virtual FX_BOOL IsEOF() = 0;
726 virtual FX_FILESIZE GetPosition() = 0;
727
737 virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;
746 virtual size_t ReadBlock(void* buffer, size_t size) = 0;
747
757 virtual FX_BOOL WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) = 0;
766 virtual FX_BOOL WriteBlock(const void* buffer, size_t size) {return WriteBlock(buffer, GetSize(), size);}
767
773 virtual FX_BOOL Flush() = 0;
774
775 #if !defined(__EMSCRIPTEN__) && !defined(SWIGJAVA)
776 protected:
777 #endif
778 virtual ~IFX_FileStream() {}
779 };
780
791 IFX_FileStream* FX_CreateFileStream(FX_LPCSTR filename, FX_DWORD dwModes, IFX_Allocator* pAllocator = NULL);
792
803 IFX_FileStream* FX_CreateFileStream(FX_LPCWSTR filename, FX_DWORD dwModes, IFX_Allocator* pAllocator = NULL);
804 //<<<+++OPENSOURCE_END
805
806 //*****************************************************************************
807 //* IFX_ChunkFileStream
808 //*****************************************************************************
810 class IFX_ChunkFileStream : public IFX_FileStream
811 {
812 public:
818 virtual void Release() = 0;
819
825 virtual FX_FILESIZE GetSize() = 0;
831 virtual FX_BOOL IsEOF() = 0;
837 virtual FX_FILESIZE GetPosition() = 0;
838
848 virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size) = 0;
857 virtual size_t ReadBlock(void* buffer, size_t size) = 0;
858
868 virtual FX_BOOL WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) = 0;
877 virtual FX_BOOL WriteBlock(const void* buffer, size_t size)
878 {
879 return WriteBlock(buffer, GetSize(), size);
880 }
881
887 virtual FX_BOOL Flush() = 0;
888
889 protected:
895 virtual IFX_FileStream* Retain() = 0;
896
897 virtual ~IFX_ChunkFileStream() {}
898
899 friend class CFX_ChunkFileStreamsManager;
900 };
901
902 //*****************************************************************************
903 //* CFX_ChunkFileStreamsManager
904 //*****************************************************************************
906 class CFX_ChunkFileStreamsManagerImpl;
907 class CFX_ChunkFileStreamsManager : public CFX_Object
908 {
909 public:
917 CFX_ChunkFileStreamsManager(IFX_FileStream* pFileStream, size_t nChunkSize = 1024);
923 ~CFX_ChunkFileStreamsManager();
924
930 IFX_ChunkFileStream* CreateChunkFileStream();
931
932 private:
933 std::shared_ptr<CFX_ChunkFileStreamsManagerImpl> m_pImpl;
934 };
935
936 //*****************************************************************************
937 //* IFX_FileAccess
938 //*****************************************************************************
940 class IFX_FileAccess
941 {
942 public:
948 virtual void Release() = 0;
949
955 virtual IFX_FileAccess* Retain() = 0;
963 virtual void GetPath(CFX_WideString& wsPath) = 0;
964
972 virtual IFX_FileStream* CreateFileStream(FX_DWORD dwModes) = 0;
973
974 protected:
975 virtual ~IFX_FileAccess() {}
976 };
977
987 IFX_FileAccess* FX_CreateDefaultFileAccess(FX_WSTR wsPath, IFX_Allocator* pAllocator = NULL);
988
989 class IFX_FileCollection
990 {
991 public:
992 virtual void Release() = 0;
993
994 virtual FX_POSITION GetStartPos() = 0;
995 virtual IFX_FileAccess* GetNextFile(FX_POSITION& pos) = 0;
996
997 protected:
998 virtual ~IFX_FileCollection() {}
999 };
1000 //<<<+++OPENSOURCE_END
1001
1002 //*****************************************************************************
1003 //* 内存流
1004 //*****************************************************************************
1006 class IFX_MemoryStream : public IFX_FileStream
1007 {
1008 public:
1009 virtual ~IFX_MemoryStream() {}
1010
1016 virtual FX_BOOL IsConsecutive() const = 0;
1030 virtual void EstimateSize(size_t nInitSize, size_t nGrowSize) = 0;
1039 virtual FX_LPBYTE GetBuffer() const = 0;
1054 virtual void AttachBuffer(FX_LPBYTE pBuffer, size_t nSize, FX_BOOL bTakeOver = false) = 0;
1062 virtual void DetachBuffer() = 0;
1063 };
1077 IFX_MemoryStream* FX_CreateMemoryStream(FX_LPBYTE pBuffer, size_t nSize, FX_BOOL bTakeOver = false, IFX_Allocator* pAllocator = NULL);
1078
1090 IFX_MemoryStream* FX_CreateMemoryStream(FX_BOOL bConsecutive = false, IFX_Allocator* pAllocator = NULL);
1091 //<<<+++OPENSOURCE_END
1092
1093 //*****************************************************************************
1094 //* 缓冲区流的读取
1095 //*****************************************************************************
1101 class IFX_BufferRead : public IFX_StreamRead
1102 {
1103 public:
1109 virtual void Release() = 0;
1110
1116 virtual FX_BOOL IsEOF() = 0;
1122 virtual FX_FILESIZE GetPosition() = 0;
1123
1132 virtual size_t ReadBlock(void* buffer, size_t size) = 0;
1133
1141 virtual FX_BOOL ReadNextBlock(FX_BOOL bRestart = false) = 0;
1147 virtual FX_LPCBYTE GetBlockBuffer() = 0;
1153 virtual size_t GetBlockSize() = 0;
1161 virtual FX_FILESIZE GetBlockOffset() = 0;
1162
1163 protected:
1164 virtual ~IFX_BufferRead() {}
1165 };
1166
1167 //*****************************************************************************
1168 //* 缓存文件读取
1169 //*****************************************************************************
1170 #define FX_FILECACHE_CHUNKSIZE 32768
1171 #define FX_FILECACHE_CHUNKCOUNT 64
1172
1174 class CFX_CachedFileRead : public IFX_FileStream, public CFX_Object
1175 {
1176 public:
1178 CFX_CachedFileRead();
1180 virtual ~CFX_CachedFileRead();
1181
1193 FX_BOOL Init(FX_INT32 nChunkSize, FX_INT32 nChunkCount, FX_LPVOID pBuffer, IFX_Allocator* pAllocator = NULL);
1202 FX_BOOL AttachFile(IFX_FileRead* pFile, FX_BOOL bTakeOver);
1211 FX_BOOL PreCache(FX_FILESIZE offset, FX_INT32 nCacheCount);
1212
1218 virtual FX_FILESIZE GetSize();
1224 virtual FX_BOOL IsEOF();
1230 virtual FX_FILESIZE GetPosition();
1231
1241 virtual FX_BOOL ReadBlock(void* buffer, FX_FILESIZE offset, size_t size);
1250 virtual size_t ReadBlock(void* buffer, size_t size);
1251
1252 protected:
1253 FXMT_LOCKOBJECT_DEFINE(m_LockObj);
1254 FX_LPVOID m_pData;
1255 FX_DWORD m_dwCount;
1256
1257 /* @brief 创建共享实例。 */
1258 virtual IFX_FileStream* Retain();
1259 /* @brief 当要释放所有资源时调用 */
1260 virtual void Release();
1262 virtual FX_BOOL WriteBlock(const void* buffer, FX_FILESIZE offset, size_t size) {return false;}
1264 virtual FX_BOOL Flush() {return false;}
1265 };
1266 //<<<+++OPENSOURCE_END
1267
1268 //<<<+++OPENSOURCE_MUST_BEGIN
1269 #endif // _FX_STREAM_H_
1270 //<<<+++OPENSOURCE_MUST_END
1271
1274 //<<<+++OPENSOURCE_END
IFX_FileAccess::GetPath
virtual void GetPath(CFX_WideString &wsPath)=0
获取当前路径字符串。
IFX_FileRead::ReadBlock
virtual FX_BOOL ReadBlock(void *buffer, FX_INT64 offset, size_t size)=0
从文件中读取数据块。
CFX_CachedFileRead::GetSize
virtual FX_INT64 GetSize()
获取文件的总大小
FX_LPVOID
void * FX_LPVOID
指向任意类型的指针。
Definition: fx_system.h:654
IFX_MemoryStream
内存流接口。
Definition: fx_stream.h:1006
IFX_FileRead::ReadBlock
virtual size_t ReadBlock(void *buffer, size_t size)
从流中读取数据块。
Definition: fx_stream.h:648
FX_WCHAR
wchar_t FX_WCHAR
编译器相关的Unicode字符（Microsoft编译器为16位，gcc为32位）。
Definition: fx_system.h:732
IFX_FileWrite::Release
virtual void Release()=0
释放所有资源时调用
FX_CreateDefaultFileAccess
IFX_FileAccess * FX_CreateDefaultFileAccess(FX_WSTR wsPath, IFX_Allocator *pAllocator=0)
创建基于CRT的文件I/O接口。
IFX_FileWrite
文件写入接口。
Definition: fx_stream.h:470
FX_DWORD
unsigned long FX_DWORD
32位无符号整数。
Definition: fx_system.h:726
CFX_CachedFileRead::AttachFile
FX_BOOL AttachFile(IFX_FileRead *pFile, FX_BOOL bTakeOver)
附加文件读取。
IFX_FileStream::Release
virtual void Release()=0
销毁当前实例。
CFX_WideStringC
常量宽字符串类
Definition: fx_string.h:1210
IFX_FileWrite::WriteBlock
virtual FX_BOOL WriteBlock(const void *pData, FX_INT64 offset, size_t size)=0
写入数据块。
IFX_FileRead::SetRange
virtual FX_BOOL SetRange(FX_INT64 offset, FX_INT64 size)
设置访问范围。
Definition: fx_stream.h:623
FX_File_Exist
FX_BOOL FX_File_Exist(FX_BSTR fileName)
确定文件是否存在。
FX_File_Close
void FX_File_Close(FX_HFILE hFile, IFX_Allocator *pAllocator=0)
关闭文件。
IFX_StreamRead::SetPosition
virtual FX_INT64 SetPosition(FX_INT64 pos)
设置当前文件访问位置。
Definition: fx_stream.h:580
FX_File_Copy
FX_BOOL FX_File_Copy(FX_BSTR fileNameSrc, FX_BSTR fileNameDst)
复制文件。
IFX_FileAccess::Release
virtual void Release()=0
销毁当前实例。
IFX_StreamRead::IsEOF
virtual FX_BOOL IsEOF()=0
确定是否到达流的末尾。
IFX_ChunkFileStream
基于分块的文件流接口，用于读取和写入。
Definition: fx_stream.h:810
IFX_MemoryStream::GetBuffer
virtual FX_LPBYTE GetBuffer() const =0
获取当前内存缓冲区。
IFX_ChunkFileStream::WriteBlock
virtual FX_BOOL WriteBlock(const void *buffer, FX_INT64 offset, size_t size)=0
将数据块写入流中。
FX_DeleteFolder
FX_BOOL FX_DeleteFolder(FX_LPCSTR path)
删除文件夹。
FX_CloseFolder
void FX_CloseFolder(void *handle)
关闭文件夹句柄。
IFX_BufferRead::GetBlockBuffer
virtual FX_LPCBYTE GetBlockBuffer()=0
获取块数据的内部缓冲区。
FX_GetFolderSeparator
FX_WCHAR FX_GetFolderSeparator()
获取系统的文件夹分隔符。很可能是 '/' 或 '\'。
IFX_StreamRead::ReadBlock
virtual size_t ReadBlock(void *buffer, size_t size)=0
从顺序流中读取数据块。
IFX_FileStream::IsEOF
virtual FX_BOOL IsEOF()=0
确定是否到达流的末尾。
IFX_FileRead::GetPosition
virtual FX_INT64 GetPosition()
获取流中当前的读取位置。
Definition: fx_stream.h:614
FX_LPCWSTR
wchar_t const * FX_LPCWSTR
指向常量Unicode字符的指针。
Definition: fx_system.h:736
IFX_StreamWrite::Release
virtual void Release()=0
释放所有资源时调用
IFX_FileRead::SetPosition
virtual FX_INT64 SetPosition(FX_INT64 pos)
设置当前文件访问位置。
Definition: fx_stream.h:657
IFX_ChunkFileStream::ReadBlock
virtual FX_BOOL ReadBlock(void *buffer, FX_INT64 offset, size_t size)=0
从流中读取数据块。
FX_File_WritePos
size_t FX_File_WritePos(FX_HFILE hFile, const void *pBuffer, size_t szBuffer, FX_INT64 pos)
在指定位置写入数据。
FX_GetNextFile
FX_BOOL FX_GetNextFile(void *handle, CFX_ByteString &filename, FX_BOOL &bFolder, FX_LPCSTR absPath=0)
读取文件夹中的下一个条目。
FX_File_Open
FX_HFILE FX_File_Open(FX_BSTR fileName, FX_DWORD dwMode, IFX_Allocator *pAllocator=0)
以指定的访问模式打开文件。
CFX_CachedFileRead::Init
FX_BOOL Init(FX_INT32 nChunkSize, FX_INT32 nChunkCount, FX_LPVOID pBuffer, IFX_Allocator *pAllocator=0)
初始化分块大小和分块数量。
CFX_CachedFileRead
缓存文件读取接口。
Definition: fx_stream.h:1174
IFX_FileRead::Release
virtual void Release()=0
释放所有资源时调用
IFX_FileRead
文件读取接口。
Definition: fx_stream.h:587
CFX_WideString
宽字符串类
Definition: fx_string.h:1457
IFX_StreamWrite
流写入接口。
Definition: fx_stream.h:441
FX_POSITION
void * FX_POSITION
用于表示集合中元素位置的值。
Definition: fx_system.h:658
FX_File_Read
size_t FX_File_Read(FX_HFILE hFile, void *pBuffer, size_t szBuffer)
从当前文件访问位置读取数据。
IFX_StreamRead::GetPosition
virtual FX_INT64 GetPosition()=0
获取流中当前的读取位置。
CFX_CachedFileRead::GetPosition
virtual FX_INT64 GetPosition()
获取流中当前的读取位置。
IFX_FileStream::WriteBlock
virtual FX_BOOL WriteBlock(const void *buffer, size_t size)
将数据块写入当前流的末尾。
Definition: fx_stream.h:766
IFX_StreamRead
流读取接口。
Definition: fx_stream.h:541
IFX_FileRead::IsEOF
virtual FX_BOOL IsEOF()
确定是否到达流的末尾。
Definition: fx_stream.h:608
IFX_ChunkFileStream::GetPosition
virtual FX_INT64 GetPosition()=0
获取流中当前的读取位置。
FX_File_Write
size_t FX_File_Write(FX_HFILE hFile, const void *pBuffer, size_t szBuffer)
从当前文件访问位置写入数据。
IFX_FileWrite::Flush
virtual FX_BOOL Flush()=0
刷新文件的内部缓冲区
IFX_BufferRead
IFX_BufferRead流提供了读取流数据的优化方法。 通常，一个流维护用于数据访问的内部缓冲区，此缓冲区可以直接提供给调用者， 从而避免数据复制。
Definition: fx_stream.h:1101
IFX_ChunkFileStream::Flush
virtual FX_BOOL Flush()=0
刷新内部缓冲区。
FX_INT32
int FX_INT32
32位有符号整数。
Definition: fx_system.h:683
IFX_ChunkFileStream::IsEOF
virtual FX_BOOL IsEOF()=0
确定是否到达流的末尾。
FX_CreateFileWrite
IFX_FileWrite * FX_CreateFileWrite(FX_LPCSTR filename, IFX_Allocator *pAllocator=0)
（仅适用于支持CRT文件访问（fopen，...）的平台）创建基于CRT的文件写入接口。
FX_File_ReadPos
size_t FX_File_ReadPos(FX_HFILE hFile, void *pBuffer, size_t szBuffer, FX_INT64 pos)
从指定位置读取数据。
IFX_ChunkFileStream::Retain
virtual IFX_FileStream * Retain()=0
创建共享实例。
IFX_BufferRead::GetBlockOffset
virtual FX_INT64 GetBlockOffset()=0
获取内部缓冲区中数据的偏移量。
IFX_BufferRead::GetBlockSize
virtual size_t GetBlockSize()=0
获取内部缓冲区中数据的大小。
FX_BOOL
int FX_BOOL
布尔变量（应为TRUE或FALSE）。
Definition: fx_system.h:691
IFX_FileAccess
文件访问接口，用于打开文件。
Definition: fx_stream.h:940
FX_CreateFolder
FX_BOOL FX_CreateFolder(FX_LPCSTR path)
创建新文件夹。
FX_OpenFolder
void * FX_OpenFolder(FX_LPCSTR path)
打开文件夹进行读取。
CFX_CachedFileRead::Release
virtual void Release()
销毁当前实例。
IFX_StreamWrite::Flush
virtual FX_BOOL Flush()
刷新流数据。
Definition: fx_stream.h:461
FX_LPCSTR
char const * FX_LPCSTR
指向常量8位Windows (ANSI) 字符的指针。
Definition: fx_system.h:705
CFX_CachedFileRead::Flush
virtual FX_BOOL Flush()
刷新内部缓冲区。读取模式不支持，直接返回false。
Definition: fx_stream.h:1264
FX_IsFilePathExist
FX_BOOL FX_IsFilePathExist(FX_LPCWSTR path)
检查路径是否存在，包括文件路径和文件夹路径。
IFX_BufferRead::ReadNextBlock
virtual FX_BOOL ReadNextBlock(FX_BOOL bRestart=false)=0
读取顺序流中的下一个块。
IFX_FileStream
文件流接口，用于读取和写入。
Definition: fx_stream.h:692
CFX_CachedFileRead::CFX_CachedFileRead
CFX_CachedFileRead()
构造函数。
IFX_FileAccess::Retain
virtual IFX_FileAccess * Retain()=0
创建共享实例。
CFX_CachedFileRead::IsEOF
virtual FX_BOOL IsEOF()
确定是否到达流的末尾。
IFX_FileWrite::WriteBlock
virtual FX_BOOL WriteBlock(const void *pData, size_t size)
将数据块写入到末尾。
Definition: fx_stream.h:506
CFX_CachedFileRead::Retain
virtual IFX_FileStream * Retain()
创建共享实例。
CFX_CachedFileRead::WriteBlock
virtual FX_BOOL WriteBlock(const void *buffer, FX_INT64 offset, size_t size)
将数据块写入流中。读取模式不支持，直接返回false。
Definition: fx_stream.h:1262
FX_File_Move
FX_BOOL FX_File_Move(FX_BSTR fileNameSrc, FX_BSTR fileNameDst)
移动文件。
FX_LPBYTE
unsigned char * FX_LPBYTE
指向FX_BYTE的指针。
Definition: fx_system.h:667
IFX_FileRead::GetSize
virtual FX_INT64 GetSize()=0
获取文件的总大小。
FX_File_Delete
FX_BOOL FX_File_Delete(FX_BSTR fileName)
删除文件。
FX_File_GetPosition
FX_INT64 FX_File_GetPosition(FX_HFILE hFile)
获取当前文件访问位置。
IFX_Allocator
Foxit分配器接口。
Definition: fx_memory.h:994
IFX_FileStream::WriteBlock
virtual FX_BOOL WriteBlock(const void *buffer, FX_INT64 offset, size_t size)=0
将数据块写入流中。
FX_File_Flush
FX_BOOL FX_File_Flush(FX_HFILE hFile)
如果需要则刷新内部缓冲区。
IFX_FileRead::ClearRange
virtual void ClearRange()
清除由函数 IFX_FileRead::SetRange 设置的访问范围。
Definition: fx_stream.h:629
FXSYS_assert
#define FXSYS_assert
断言。
Definition: fx_system.h:804
IFX_BufferRead::GetPosition
virtual FX_INT64 GetPosition()=0
获取流中当前的读取位置。
FX_File_GetSize
FX_INT64 FX_File_GetSize(FX_HFILE hFile)
获取文件大小。
IFX_BufferRead::ReadBlock
virtual size_t ReadBlock(void *buffer, size_t size)=0
从顺序流中读取数据块。
IFX_FileWrite::GetSize
virtual FX_INT64 GetSize()=0
获取文件的总大小
IFX_FileStream::Flush
virtual FX_BOOL Flush()=0
刷新内部缓冲区。
IFX_BufferRead::IsEOF
virtual FX_BOOL IsEOF()=0
确定是否到达流的末尾。
IFX_MemoryStream::DetachBuffer
virtual void DetachBuffer()=0
分离当前内存缓冲区。
IFX_FileStream::GetSize
virtual FX_INT64 GetSize()=0
获取当前流的大小，以字节为单位。
IFX_FileStream::ReadBlock
virtual FX_BOOL ReadBlock(void *buffer, FX_INT64 offset, size_t size)=0
从流中读取数据块。
CFX_ByteStringC
常量字节字符串类
Definition: fx_string.h:51
IFX_StreamRead::Release
virtual void Release()=0
释放所有资源时调用。
IFX_FileStream::GetPosition
virtual FX_INT64 GetPosition()=0
获取流中当前的读取位置。
FX_File_Truncate
FX_BOOL FX_File_Truncate(FX_HFILE hFile, FX_INT64 szFile)
截断文件大小。
IFX_StreamWrite::WriteBlock
virtual FX_BOOL WriteBlock(const void *pData, size_t size)=0
写入数据块。
CFX_CachedFileRead::PreCache
FX_BOOL PreCache(FX_INT64 offset, FX_INT32 nCacheCount)
预缓存。
CFX_ByteString
字节字符串类
Definition: fx_string.h:317
IFX_ChunkFileStream::GetSize
virtual FX_INT64 GetSize()=0
获取当前流的大小，以字节为单位。
FX_CreateFileRead
IFX_FileRead * FX_CreateFileRead(FX_LPCSTR filename, IFX_Allocator *pAllocator=0)
（仅适用于支持CRT文件访问的平台）创建基于CRT的文件读取接口。
FX_LPCBYTE
unsigned char const * FX_LPCBYTE
指向常量FX_BYTE的指针。
Definition: fx_system.h:669
FX_CreateFileStream
IFX_FileStream * FX_CreateFileStream(FX_LPCSTR filename, FX_DWORD dwModes, IFX_Allocator *pAllocator=0)
（仅适用于支持CRT文件访问的平台）创建基于CRT的文件I/O接口。
fx_memory.h
内存管理相关定义和类的头文件。
IFX_ChunkFileStream::WriteBlock
virtual FX_BOOL WriteBlock(const void *buffer, size_t size)
将数据块写入当前流的末尾。
Definition: fx_stream.h:877
IFX_MemoryStream::AttachBuffer
virtual void AttachBuffer(FX_LPBYTE pBuffer, size_t nSize, FX_BOOL bTakeOver=false)=0
附加内存缓冲区。
IFX_FileStream::Retain
virtual IFX_FileStream * Retain()=0
创建共享实例。
NULL
#define NULL
空指针值。
Definition: fx_system.h:792
FX_DEFINEHANDLE
#define FX_DEFINEHANDLE(name)
定义句柄类型的宏。
Definition: fx_system.h:772
FX_FILESIZE
#define FX_FILESIZE
直接支持大文件。
Definition: fx_stream.h:155
CFX_CachedFileRead::ReadBlock
virtual FX_BOOL ReadBlock(void *buffer, FX_INT64 offset, size_t size)
从文件中读取数据块
IFX_FileAccess::CreateFileStream
virtual IFX_FileStream * CreateFileStream(FX_DWORD dwModes)=0
创建IFX_FileStream来操作文件。
IFX_MemoryStream::IsConsecutive
virtual FX_BOOL IsConsecutive() const =0
确定当前模式是否为连续模式。
IFX_MemoryStream::EstimateSize
virtual void EstimateSize(size_t nInitSize, size_t nGrowSize)=0
更改初始大小和增长大小。
IFX_ChunkFileStream::Release
virtual void Release()=0
销毁当前实例。
IFX_BufferRead::Release
virtual void Release()=0
当要释放当前实例时调用。
FX_File_SetPosition
FX_INT64 FX_File_SetPosition(FX_HFILE hFile, FX_INT64 pos)
设置当前文件访问位置。
FX_CreateMemoryStream
IFX_MemoryStream * FX_CreateMemoryStream(FX_LPBYTE pBuffer, size_t nSize, FX_BOOL bTakeOver=false, IFX_Allocator *pAllocator=0)
通过给定的内存缓冲区创建流对象。此函数创建连续内存流对象。
CFX_CachedFileRead::~CFX_CachedFileRead
virtual ~CFX_CachedFileRead()
析构函数。