2024-09-20 19:24:32 +08:00
|
|
|
/*
|
|
|
|
|
文件名:IOClass.nut
|
|
|
|
|
路径:Dps_A/BaseClass/IOClass/IOClass.nut
|
|
|
|
|
创建日期:2024-09-19 14:13
|
|
|
|
|
文件用途:IO流类
|
|
|
|
|
*/
|
|
|
|
|
class IO extends Base_C_Object {
|
|
|
|
|
_Fopen_Address = Module.getExportByName(null, "fopen");
|
|
|
|
|
_Fgetc_Address = Module.getExportByName(null, "fgetc");
|
|
|
|
|
_Fputc_Address = Module.getExportByName(null, "fputc");
|
|
|
|
|
_Fgets_Address = Module.getExportByName(null, "fgets");
|
|
|
|
|
_Fputs_Address = Module.getExportByName(null, "fputs");
|
|
|
|
|
_Fread_Address = Module.getExportByName(null, "fread");
|
|
|
|
|
_Fwrite_Address = Module.getExportByName(null, "fwrite");
|
|
|
|
|
_Fclose_Address = Module.getExportByName(null, "fclose");
|
|
|
|
|
_Fseek_Address = Module.getExportByName(null, "fseek");
|
|
|
|
|
_Ftell_Address = Module.getExportByName(null, "ftell");
|
|
|
|
|
_Rewind_Address = Module.getExportByName(null, "rewind");
|
2024-10-11 23:56:27 +08:00
|
|
|
_Flush_Address = Module.getExportByName(null, "fflush");
|
2024-09-20 19:24:32 +08:00
|
|
|
|
|
|
|
|
constructor(FileName, Modes) {
|
|
|
|
|
local FileObj = Sq_CallFunc(_Fopen_Address, "pointer", ["pointer", "pointer"], Str_Ptr(FileName), Str_Ptr(Modes));
|
|
|
|
|
if (FileObj) {
|
|
|
|
|
base.constructor(FileObj);
|
2024-10-27 15:32:44 +08:00
|
|
|
} else throw ("文件打开错误! FileName: " + FileName);
|
2024-09-20 19:24:32 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取一行
|
|
|
|
|
function ReadLine() {
|
|
|
|
|
local Buffer = Memory.alloc(256);
|
|
|
|
|
local RetFlag = Sq_CallFunc(_Fgets_Address, "pointer", ["pointer", "int", "pointer"], Buffer.C_Object, 256, this.C_Object);
|
|
|
|
|
if (RetFlag)
|
|
|
|
|
return Buffer.readUtf8String();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取一个
|
|
|
|
|
function Read() {
|
|
|
|
|
local RetFlag = Sq_CallFunc(_Fgetc_Address, "char", ["pointer"], this.C_Object);
|
|
|
|
|
if (RetFlag) {
|
|
|
|
|
return RetFlag;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//读取指定大小
|
|
|
|
|
function ReadBuffer(size) {
|
|
|
|
|
local Buffer = Memory.alloc(size);
|
|
|
|
|
local RetFlag = Sq_CallFunc(_Fread_Address, "int", ["pointer", "int", "int", "pointer"], Buffer.C_Object, 1, size, this.C_Object);
|
|
|
|
|
if (RetFlag > 0) {
|
|
|
|
|
return {
|
|
|
|
|
count = RetFlag,
|
|
|
|
|
str = Buffer.readUtf8String(RetFlag)
|
|
|
|
|
};
|
|
|
|
|
} else {
|
|
|
|
|
return {
|
|
|
|
|
count = 0,
|
|
|
|
|
str = ""
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//写入字符串
|
|
|
|
|
function Write(Str) {
|
|
|
|
|
local Buffer = Memory.allocUtf8String(Str);
|
|
|
|
|
Sq_CallFunc(_Fputs_Address, "int", ["pointer", "pointer"], Buffer.C_Object, this.C_Object);
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-11 23:56:27 +08:00
|
|
|
function Flush() {
|
|
|
|
|
Sq_CallFunc(_Flush_Address, "pointer", ["pointer"], this.C_Object);
|
|
|
|
|
}
|
2024-09-20 19:24:32 +08:00
|
|
|
|
|
|
|
|
//关闭文件
|
|
|
|
|
function Close() {
|
|
|
|
|
Sq_CallFunc(_Fclose_Address, "pointer", ["pointer"], this.C_Object);
|
|
|
|
|
}
|
|
|
|
|
}
|