📄 index.htm
字号:
<p>入口参数:无</p>
<p>函数返回:无</p>
<p>函数说明:<br>
使用这个函数可以释放使用ConnectProvider后连接的资源<br>
注意:在绝大多数情况下你完全可以不使用这个函数,我们的系统会在合适的时候为你释放相关的资源</p>
<p> </p>
<p>bool <a name="Open"></a>Open(char* FileName,bool bReadOnly=true,bool bPacked=false,char
*password=NULL)</p>
<p>入口参数:<br>
FileName : 你要打开的文件(包)名<br>
bReadOnly : 是否以只读方式打开,只读方式打开的文件不能使用Write方法写入数据<br>
bPacked : 打开的文件是否作为<a href="#fpak">文件包</a>来处理,文件包不能使用Write方法<br>
password :
打开文件包的密码,通常的文件,文件包可能不需要密码,这时设置为NULL即可,或者忽略这个参数。只有支持加密的文件包才需要这个参数</p>
<p>函数返回:是否成功打开了文件<br>
true : 打开成功<br>
false : 打开失败</p>
<p>函数说明:<br>
这个函数用来打开我们需要操作的文件,这时有两种可能普通文件,或者压缩包(文件包)文件<br>
打开一个普通文件:<br>
CMD_File file;<br>
file.Open("test.txt",false); // 相当于file.Open("test.txt",false,false,NULL); <br>
file.Read();
// 读取test.txt的内容到缓冲区<br>
file.Write("12345678\0",9); // 写入字符串“12345678”到文件中<br>
打开一个压缩包文件:<br>
CMD_File file;<br>
file.Open("test.epk",true,true,"test123"); // 用密码"test123"打开一个名为test.epk的<br>
// 压缩包文件,如果没有密码则使用NULL<br>
file.Locate("txt\\test.txt");
// 在压缩包里面定位txt\test.txt文件<br>
file.Read();
// 读取test.txt的内容到缓冲区</p>
<p> </p>
<p>void <a name="Close"></a>Close()</p>
<p>入口参数:无</p>
<p>函数返回:无</p>
<p>函数说明:<br>
这个函数用来释放我们打开一个文件后该文件占用的资源。<br>
注意:在绝大多数情况下你完全可以不使用这个函数,我们的系统会在合适的时候为你释放相关的资源</p>
<p> </p>
<p>bool <a name="LocateFile"></a>Locate(char* PathName,char *password=NULL)</p>
<p>入口参数:<br>
PathName : 你要定位的文件(包)名<br>
password : 定位的文件的密码,通常的文件,文件包可能不需要密码,这时设置为NULL即可,或者忽略这个参数。</p>
<p>函数返回:是否成功定位了文件<br>
true : 定位成功<br>
false : 定位失败</p>
<p>函数说明:<br>
这个函数用来在包中定为一个我们需要操作的文件。<br>
注意:本函数只对文件包有效,不支持普通文件。<br>
我们对压缩包的操作都通过使用定位来通知系统我们要操作压缩包里的哪个文件。因此在对压缩包里的文件操作前我们首先要定位文件。</p>
<p> </p>
<p>DWORD <a name="GetFileSize"></a>GetLength()</p>
<p>入口参数:无</p>
<p>函数返回:文件的长度<br>
正常情况下:返回文件的长度(普通文件而言)或者返回当前定位的文件长度(文件包而言)<br>
如果产生错误:返回0xFFFFFFFF(例如文件尚未打开就查询文件长度等)</p>
<p>函数说明:<br>
这个函数用来检索我们已经打开的文件长度或者已经定位的文件长度<br>
如:<br>
CMD_File file;<br>
file.Open("test.txt",false); // 相当于file.Open("test.txt",false,false,NULL);
<br>
DWORD len = file.GetLength(); // 得到test.txt文件的长度(字节数)<br>
file.Open("test.epk",true,true);<br>
file.Locate("txt\\test.txt");<br>
len = file.GetLength(); // 得到test.epk中txt\test.txt文件的长度</p>
<p> </p>
<p>bool <a name="Read"></a>Read(LPBYTE *buffer=NULL,DWORD size=0); </p>
<p>入口参数:<br>
buffer : 接收数据的缓冲地址 <br>
buffer为NULL时 : 系统读取内容到系统缓冲区中,随后用户可以使用GetBuffer()来取得这个缓冲区<br>
buffer不为NULL : 如果buffer已分配空间则数据被读取到buffer中,否则buffer将指向系统的缓冲区<br>
size : 要读取的字节数,仅对文件有效,文件包将忽略次参数(随意瞎填一个)<br>
size为0时 : 读取整个文件的长度<br>
size不为0 : 读取size个字节到指定buffer</p>
<p>函数返回:文件是否读取成功<br>
true : 文件读取成功<br>
false : 文件读取失败</p>
<p>函数说明:<br>
将打开的文件或者已经定位的文件读入buffer中。如:<br>
CMD_File file;<br>
file.Open("test.txt",false); // 相当于file.Open("test.txt",false,false,NULL);<br>
BYTE * buf = new BYTE[5]; // 分配缓冲<br>
file.Read(&buf,5); // 读取5个字节到buf中<br>
delete [] buf; // 用完buf后记得释放buf
:-)<br>
buf = NULL;<br>
file.Read(&buf); // 相当于file.Read(&buf,0);,执行后buf指向系统的缓冲区<br>
file.Open("test.epk",true,true);<br>
file.Locate("txt\\test.txt");<br>
file.Read(); // 读取文件test\test.txt到系统缓冲中<br>
buf = file.GetBuffer(); // 得到缓冲区地址</p>
<p> </p>
<p>bool <a name="Write"></a>Write(LPCVOID buffer,DWORD size)</p>
<p>入口参数:<br>
buffer : 要写入文件的数据的缓冲地址<br>
buffer为NULL时 : 系统读取内容到系统缓冲区中,随后用户可以使用GetBuffer()来取得这个缓冲区<br>
buffer不为NULL : 如果buffer已分配空间则数据被读取到buffer中,否则buffer将指向系统的缓冲区<br>
size : 要写入的字节数</p>
<p>函数返回:文件是否读取成功<br>
true : 文件写入成功<br>
false : 文件写入失败</p>
<p>函数说明:<br>
将buffer中的内容写入到当前打开的文件中<br>
注意:不支持写入文件包文件,如果打开文件时设置bReadOnly为true本函数也返回false<br>
例:<br>
CMD_File file;<br>
file.Open("test.txt",false); // 相当于file.Open("test.txt",false,false,NULL); <br>
file.Write("12345678\0",9); // 写入字符串“12345678”到文件中</p>
<p> </p>
<p>bool <a name="Seek"></a>Seek(long move, BYTE method=FILE_CURRENT);</p>
<p>入口参数:<br>
move : 文件指针移动的距离<br>
move < 0 向前移动<br>
move > 0 向后移动<br>
method : 移动的起始位置<br>
FILE_BEGIN : 从文件开头开始开始移动move个字节<br>
FILE_CURRENT : 从文件指针的当前位置移动move个字节<br>
FILE_END : 从文件的结尾移动move个字节</p>
<p>函数返回:移动是否成功<br>
true : 指针移动成功<br>
false : 指针移动失败</p>
<p>函数说明:<br>
移动文件指针。<br>
注意:当打开的是文件时,执行Read,Write都会自动移动文件指针相应的字节数。同时本函数对文件包无效。本函数与WINAPI的seek保持一致<br>
例如:<br>
CMD_File file;<br>
file.Open("test.txt",false); // 相当于file.Open("test.txt",false,false,NULL);<br>
file.Read(NULL,3);
// 读取3个字节<br>
file.Seek(0,FILE_BEGIN); // 移动到文件头<br>
file.Read(NULL,4);
// 从头开始读取4个字节</p>
<p> </p>
<p>LPBYTE <a name="GetBuffer"></a>GetBuffer()</p>
<p>入口参数:无</p>
<p>函数返回:系统缓冲区地址</p>
<p>函数说明:<br>
MDFile系统中自带了一个数据缓冲来临时存放从文件中读取的数据。以方便用户的使用。用这个函数可以取得缓冲的地址。</p>
<p> </p>
<p>DWORD <a name="GetBufferLen"></a>GetBufferLen()</p>
<p>入口参数:无</p>
<p>函数返回:系统缓冲区长度(字节数)</p>
<p>函数说明:<br>
MDFile系统中自带了一个数据缓冲来临时存放从文件中读取的数据。以方便用户的使用。用这个函数可以取得缓冲的长度。</p>
<p> </p>
<p>bool <a name="WriteBufferToFile"></a>WriteBufferToFile(char *PathName)</p>
<p>入口参数:PathName (要写入的文件的路径、文件全名)</p>
<p>函数返回:写入是否成功<br>
true : 写入成功<br>
false : 写入失败</p>
<p>函数说明:<br>
MDFile系统中自带了一个数据缓冲来临时存放从文件中读取的数据。以方便用户的使用。用这个函数可以将缓冲区的内容写到一个指定的文件中。<br>
例如:<br>
CMD_File file;<br>
file.Open("test.epk",true,true);<br>
file.Locate("txt\\test.txt");<br>
file.Read(); // 读取文件test\test.txt到系统缓冲中<br>
file.WriteBufferToFile("output.txt"); // 写到output.txt文件中</p>
<p> </p>
<hr>
<p>EDL(Encoding/Decoding Library)的开发接口:</p>
<p>扩展库后缀 : .edl</p>
<p>必须接口:<br>
注意:在该EDL中一定要有以下函数,请注意大小写 :-)</p>
<p>DWORD getProviderType(void){ return 0x45444650; }</p>
<p>这个函数必须返回0x45444650,以表示这个库是EDL。</p>
<p><br>
DWORD getProviderVersion(void){ return 0xaabbccdd; }</p>
<p>这个函数应该返回该库的版本。0xaabbccdd表示版本170.187.204.221</p>
<p><br>
char* getProviderName()</p>
<p>这个函数应该返回该库的名称。</p>
<p><br>
char* getProviderInfo()</p>
<p>这个函数应该返回该库的说明信息。</p>
<p>void About()</p>
<p>这个函数应该显示该库的关于对话框。注意:你只需要实现getProviderInfo()或者About中的任何一个即可。</p>
<p><br>
DWORD getMemNeeded(DWORD len)</p>
<p>这个函数应该返回编码(压缩)一个len长度的文件所需要的内存块需要多少字节的内存。</p>
<p><br>
bool Encode(LPBYTE *in,DWORD inlen,LPBYTE *out,DWORD &outlen)</p>
<p>编码函数,这个函数负责对字节流的编码工作<br>
in : 需要编码(压缩)的字节流的地址<br>
inlen : 需要编码(压缩)的字节流长度<br>
out : 输出编码后的字节流的目标地址<br>
outlen: 编码后的字节流的长度</p>
<p><br>
bool Decode(LPBYTE *in,DWORD inlen,LPBYTE *out)</p>
<p>解码函数,这个函数负责对字节流的解码工作<br>
in : 需要解码的字节流的地址<br>
inlen : 需要解码的字节流的长度<br>
out : 输出解码后的字节流的地址<br>
outlen: 解码后的字节流的长度 </p>
<hr>
<p>FileProvider的开发</p>
<p>必须接口 :<br>
注意:在该FileProvider中一定要有以下函数,请注意大小写 :-)</p>
<p>DWORD getProviderType(void){return 0x4650454C;}</p>
<p>这个函数必须返回0x4650454C,以表示这个库是FileProvider。</p>
<p> </p>
<p>bool setFileHandle(HANDLE h,char *filename,char *passowrd)</p>
<p>这个函数用来指定操作的文件(压缩包)的句柄,文件名以及访问密码。<br>
这个句柄或文件名表示要操作的文件对象。</p>
<p> </p>
<p>bool Locate(char *pathname,char *password)</p>
<p>这个函数用于定位包中的文件,以便接下来的操作。定位成功:返回true。否则返回false。</p>
<p> </p>
<p>DWORD getFileSize(void)</p>
<p>这个函数用来获取被定位的文件的长度(字节数)。返回0xFFFFFFFF表示错误。</p>
<p> </p>
<p>bool Read(LPVOID lpbuffer,DWORD len)</p>
<p>这个函数用来读取压缩包中当前被定位的文件,lpbuffer是已分配len字节的空间地址,len是lpbuffer的长度。<br>
读取成功:返回true。否则返回false</p>
</body>
</html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -