环/课程/文件
本章我们将学习关于文件函数。
- Read()
- Write()
- Dir()
- Rename()
- Remove()
- fopen()
- fclose()
- fflush()
- freopen()
- tempfile()
- tempname()
- fseek()
- ftell()
- rewind()
- fgetpos()
- fsetpos()
- clearerr()
- feof()
- ferror()
- perror()
- fgetc()
- fgets()
- fputc()
- fputs()
- ungetc()
- fread()
- fwrite()
- fexists()
我们可以使用 Read() 函数读取文件内容。
语法
Read(cFileName) ---> String contains the file content
示例
see read("myfile.txt")
read 函数也可以读取二进制文件。
示例
see read("myapp.exe")
我们可以使用 Write() 函数将字符串写入文件。
write 函数可以将二进制数据写入二进制文件。
语法
Write(cFileName,cString) # write string cString to file cFileName
示例
# copy file
cFile = read("ring.exe")
write("ring2.exe",cFile)
我们可以使用 Dir() 函数获取文件夹内容(文件和子文件夹)。
语法
Dir(cFolderPath) ---> List contains files & sub folders.
此函数返回一个列表,每个列表项是一个包含两个项的列表
- 文件/子文件夹名称
- 类型(0 = 文件,1 = 文件夹/目录)
示例
see "Testing DIR() " + nl
mylist = dir("C:\myfolder")
for x in mylist
if x[2]
see "Directory : " + x[1] + nl
else
see "File : " + x[1] + nl
ok
next
see "Files count : " + len(mylist)
我们可以使用 Rename() 函数重命名文件。
语法
Rename(cOldFileName,cNewFileName)
示例
rename("file.txt","help.txt")
我们可以使用 Remove() 函数删除文件。
语法
Remove(cFileName)
示例
remove("test.txt")
我们可以使用 Fopen() 函数打开文件。
语法
Fopen(cFileName,cMode) ---> File Handle
===== ==========================================
Mode Description
===== ==========================================
"r" Reading (The file must exist)
"w" Writing (create empty file / overwrite)
"a" Appends (create file if it doesn't exist)
"r+" update (reading/writing)
"w+" Create empty file (reading/writing)
"a+" reading & appending
===== ==========================================
当我们使用 fopen() 函数打开文件时,我们可以使用 Fclose() 函数关闭它。
语法
Fclose(file handle)
我们可以使用 Fflush() 函数清空流的输出缓冲区。
语法
Fflush(file handle)
我们可以使用相同的句柄打开另一个文件,并在关闭旧文件的同时打开另一个文件。
语法
Freopen(cFileName,cMode,file handle) ---> file handle
示例
freopen("myprogoutput.txt","w+",stdout)
see "welcome" + nl
for x = 1 to 10
see x + nl
next
/* ** 阅读 : https://en.wikipedia.org/wiki/Device_file#Device_files ** 下面的代码不可移植,我们可以在使用之前使用 iswindows() ** 并为每个操作系统编写特殊的代码。 */
freopen("CON","w",stdout) # 对于 Microsoft Windows 请参阅 "Done" + nl # 再次打印到 stdout
输出
# Output to stdout
Done
# 输出到文件 : myprogoutput.txt welcome 1 2 3 4 5 6 7 8 9 10
Tempfile() 函数创建一个临时文件(二进制)。
当流关闭时,该文件将自动删除。
语法
TempFile() ---> file handle
我们可以使用 Tempname() 函数生成临时文件名。
生成的名称将与任何现有文件的名称不同。
语法
Tempname() ---> generated file name as string
我们可以使用 Fseek() 函数设置流的文件位置。
语法
Fseek(file handle, nOffset, nWhence) ---> zero if successful
下表显示了 nWhence 值。
===== ===============================
Value Description
===== ===============================
0 Beginning of file
1 Current position
2 End of file
===== ===============================
我们可以使用 Ftell() 函数了解流的当前文件位置。
语法
Ftell(file handle) ---> file position as number
我们可以使用 Rewind() 函数将文件位置设置为文件开头。
语法
Rewind(file handle)
我们可以使用 Fgetpos() 函数获取对当前文件位置的句柄。
语法
Fgetpos(file handle) ---> position handle
我们可以使用 Fgetpos() 函数设置当前文件位置。
语法
Fsetpos(file handle,position handle)
我们可以使用 clearerr() 函数清除流的 EOF 错误和错误指示符。
语法
Clearerr(file handle)
我们可以使用 Feof() 函数测试文件结束指示符。
语法
Feof(file handle) ---> returns 1 if EOF and 0 if not
我们可以使用 Ferror() 函数测试给定流的错误指示符。
语法
Ferror(file handle) ---> returns 1 if error and 0 if not
我们可以使用 Perror() 函数将错误消息打印到 stderr。
语法
Perror(cErrorMessage)
我们可以使用 Fgetc() 函数从流中获取下一个字符。
语法
Fgetc(file handle) ---> returns character or EOF
我们可以使用 Fgets() 函数从流中读取新行。
语法
Fgets(file handle,nSize) ---> string
该函数在读取了 nSize 个字符、读取了新行字符或 EOF 时停止。
我们可以使用 Fputc() 函数将一个字符写入流。
语法
Fputc(file handle,cChar)
我们可以使用 Fputs() 函数将一个字符串写入流。
语法
Fputs(file handle,cString)
我们可以使用 Ungetc() 函数将一个字符推送到流中。
该字符将在下次读取时可用。
语法
Ungetc(file handle,character)
我们可以使用 Fread() 函数从流中读取数据。
语法
Fread(file handle,nSize)
我们可以使用 Fwrite() 函数将数据写入流。
语法
Fwrite(file handle,cString)
我们可以使用 Fexists() 函数检查文件是否存在。
语法
Fexists(cFileName) ---> returns 1 if the file exists
示例
see fexists("b:\mahmoud\apps\ring\ring.exe") + nl +
fexists("b:\mahmoud\apps\ring\ring2.exe") + nl
输出
1
0
以下程序测试了一些文件函数。
See "Testing file functions" + nl
See "open file" + nl
fp = fopen("tests\s65.ring","r")
See "reopen" + nl
fp = freopen("tests\s78.ring","r",fp)
See "close file" + nl
fclose(fp)
see "temp file" + nl
fp = tempfile()
fclose(fp)
see "temp name" + nl
see tempname() + nl
remove("tests\mytest1.txt")
write("tests\test1.txt","hello")
rename("tests\test1.txt","tests\mytest2.txt")
see "print file" + nl
fp = fopen("tests\file.ring","r")
r = fgetc(fp)
while isstring(r)
see r
r = fgetc(fp)
end
fclose(fp)
see nl+"print line from the file" + nl
fp = fopen("tests\file.ring","r")
r = fgets(fp,100)
see r
fclose(fp)
fp = fopen("tests\myfile.txt","rw+")
fseek(fp,0,2) # goto end of file
fputc(fp,"t")
fputc(fp,"e")
fputc(fp,"s")
fputc(fp,"t")
fputs(fp,"test2")
fclose(fp)
see "print file" + nl
see read("tests\myfile.txt")
fp = fopen("tests\myfile.txt","r")
see "testing ungetc() " + nl
for x = 1 to 3
r = fgetc(fp)
see r + nl
ungetc(fp,r)
next
fclose(fp)
see "testing fread() " + nl
fp = fopen("ring.exe","r")
r = fread(fp,100)
see r + nl
fclose(fp)
see "testing fwrite() " + nl
fp = fopen("tests\myfile.txt","wb")
fwrite(fp,r)
fclose(fp)