文件
Silk通过下列内置函数进行文件操作:
打开文件打开文件采用内置函数
_fun("
fopen", filename, mode),第一个参数为函数名fopen,第二个filename为需要打开的文件的路径,mode为打开模式,
打开模式可以是下列值中的任意一个:
- r 打开一个已有的文本文件,允许读取文件。
- w 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件,程序会从文件的开头写入内容。
- a 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。
- r+ 打开一个文本文件,允许读写文件。
- w+ 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。
- a+ 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。
如果处理的是二进制文件,则需使用下面的访问模式来取代上面的访问模式:
"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"
打开文件成功后,返回的是打开后的文件句柄。
关闭文件关闭文件采用内置函数
_fun("
fclose", file),第一个参数为函数名fclose,第二个file为文件句柄。
文件大小获取文件大小采用内置函数
_fun("
fsize", file),第一个参数为函数名fsize,第二个file为文件句柄,返回的是文件大小(字节数)。
读取文件读取文件采用内置函数
_fun("
fread", file, size),第一个参数为函数名fread,第二个file为文件句柄,size为要读取的字节数。
写入文件写入文件采用内置函数
_fun("
fwrite", file, content),第一个参数为函数名fwrite,第二个file为文件句柄,content为要需要写入的内容,
为字符串类型,字符串类型可以包含二进制数据。
定位文件定位文件采用内置函数
_fun("
fseek", file, pos),第一个参数为函数名fseek,第二个file为文件句柄,pos为要定位的文件内容当中的位置。
删除文件删除文件采用内置函数
_fun("
fremove", file),第一个参数为函数名fremove,第二个file为需要删除的文件名,可包含路径。
重命名文件重命名文件采用内置函数
_fun("
frename", file, newfile),第一个参数为函数名frename,第二个file为需要改名的文件名,newfile为重命名后的文件名,可包含路径。
以下是操作文件的例子:
main()
{
file=_fun("fopen","e:\\test.txt","rb"); //以二进制只读模式打开文件
if(file)
{
print("Open file OK");
size=_fun("fsize",file);
print("file size:",size);
_fun("fseek",file,0); //定位到文件的开头
content=_fun("fread",file,size); //读取文件所有内容
print(content);
_fun("fclose",file); //关闭文件
}
}
CFile类Silk安装包里有个封装了大部分文件操作函数的类CFile,方便用户的使用:
class CFile()
{
self.file=null;
self.size=0;
func Open(filename,mode)
{
self.file=_fun("fopen",filename,mode);
self.size=_fun("fsize",self.file);
_fun("fseek",self.file,0);
return self.file;
}
func ReadAll()
{
if(self.file==null)
return null;
return _fun("fread",self.file,self.size);
}
func Seek(pos)
{
if(self.file==null)
return null;
_fun("fseek",self.file,pos);
}
func Read(size)
{
if(self.file==null)
return null;
return _fun("fread",self.file,size);
}
func Write(content)
{
if(self.file==null)
return null;
_fun("fwrite",self.file,content);
}
func Close()
{
if(self.file==null)
return;
_fun("fclose",self.file);
self.file=null;
}
}
使用CFile类的例子:
#include "include\file.si"
main()
{
file=CFile();
if(file.Open("e:\\test.txt","rb"))
{
content=file.ReadAll();
print(content);
}
file.Close();
}