跳转到内容

环/课程/文件

来自维基教科书,开放的书籍,开放的世界
<

本章我们将学习关于文件函数。

  • 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() 函数读取文件内容。

语法

	Read(cFileName) ---> String contains the file content

示例

	see read("myfile.txt")

read 函数也可以读取二进制文件。

示例

	see read("myapp.exe")



Write() 函数

[编辑 | 编辑源代码]

我们可以使用 Write() 函数将字符串写入文件。

write 函数可以将二进制数据写入二进制文件。

语法

	Write(cFileName,cString)	# write string cString to file cFileName

示例

	# copy file
	cFile = read("ring.exe")
	write("ring2.exe",cFile)



Dir() 函数

[编辑 | 编辑源代码]

我们可以使用 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() 函数重命名文件。

语法

	Rename(cOldFileName,cNewFileName)

示例

	rename("file.txt","help.txt")

Remove() 函数

[编辑 | 编辑源代码]

我们可以使用 Remove() 函数删除文件。


语法

	Remove(cFileName)

示例

	remove("test.txt")

Fopen() 函数

[编辑 | 编辑源代码]

我们可以使用 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
=====	==========================================

Fclose() 函数

[编辑 | 编辑源代码]

当我们使用 fopen() 函数打开文件时,我们可以使用 Fclose() 函数关闭它。

语法

	Fclose(file handle)

Fflush() 函数

[编辑 | 编辑源代码]

我们可以使用 Fflush() 函数清空流的输出缓冲区。

语法

	Fflush(file handle)

Freopen() 函数

[编辑 | 编辑源代码]

我们可以使用相同的句柄打开另一个文件,并在关闭旧文件的同时打开另一个文件。

语法

	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() 函数创建一个临时文件(二进制)。

当流关闭时,该文件将自动删除。

语法

	TempFile() ---> file handle


Tempname() 函数

[编辑 | 编辑源代码]

我们可以使用 Tempname() 函数生成临时文件名。

生成的名称将与任何现有文件的名称不同。

语法

	Tempname() ---> generated file name as string

Fseek() 函数

[编辑 | 编辑源代码]

我们可以使用 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() 函数了解流的当前文件位置。

语法

	Ftell(file handle) ---> file position as number

Rewind() 函数

[编辑 | 编辑源代码]

我们可以使用 Rewind() 函数将文件位置设置为文件开头。

语法

	
	Rewind(file handle)

Fgetpos() 函数

[编辑 | 编辑源代码]

我们可以使用 Fgetpos() 函数获取对当前文件位置的句柄。

语法

	Fgetpos(file handle) ---> position handle

Fsetpos() 函数

[编辑 | 编辑源代码]

我们可以使用 Fgetpos() 函数设置当前文件位置。

语法

	Fsetpos(file handle,position handle)

Clearerr() 函数

[编辑 | 编辑源代码]

我们可以使用 clearerr() 函数清除流的 EOF 错误和错误指示符。

语法

	Clearerr(file handle)

Feof() 函数

[编辑 | 编辑源代码]

我们可以使用 Feof() 函数测试文件结束指示符。

语法

	Feof(file handle) ---> returns 1 if EOF and 0 if not

Ferror() 函数

[编辑 | 编辑源代码]

我们可以使用 Ferror() 函数测试给定流的错误指示符。

语法

	Ferror(file handle) ---> returns 1 if error and 0 if not

Perror() 函数

[编辑 | 编辑源代码]

我们可以使用 Perror() 函数将错误消息打印到 stderr。

语法

	Perror(cErrorMessage)

Fgetc() 函数

[编辑 | 编辑源代码]

我们可以使用 Fgetc() 函数从流中获取下一个字符。

语法

	Fgetc(file handle) ---> returns character or EOF


Fgets() 函数

[编辑 | 编辑源代码]

我们可以使用 Fgets() 函数从流中读取新行。

语法

	Fgets(file handle,nSize) ---> string

该函数在读取了 nSize 个字符、读取了新行字符或 EOF 时停止。

Fputc() 函数

[编辑 | 编辑源代码]

我们可以使用 Fputc() 函数将一个字符写入流。

语法

	Fputc(file handle,cChar)

Fputs() 函数

[编辑 | 编辑源代码]

我们可以使用 Fputs() 函数将一个字符串写入流。

语法

	Fputs(file handle,cString)


Ungetc() 函数

[编辑 | 编辑源代码]

我们可以使用 Ungetc() 函数将一个字符推送到流中。

该字符将在下次读取时可用。

语法

	Ungetc(file handle,character)


Fread() 函数

[编辑 | 编辑源代码]

我们可以使用 Fread() 函数从流中读取数据。

语法

	Fread(file handle,nSize)

Fwrite() 函数

[编辑 | 编辑源代码]

我们可以使用 Fwrite() 函数将数据写入流。

语法

	Fwrite(file handle,cString)


Fexists() 函数

[编辑 | 编辑源代码]

我们可以使用 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)


华夏公益教科书