Jump to content

Ring/Lessons/Files

From Wikibooks, open books for an open world

Files

[edit | edit source]

In this chapter we are going to learn about files functions.

  • 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() Function

[edit | edit source]

We can read the file content using the Read() function

Syntax:

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

Example:

	see read("myfile.txt")

The read function can read binary files too

Example:

	see read("myapp.exe")



Write() Function

[edit | edit source]

We can write string to file using the Write() function

The write function can write binary data to binary files.

Syntax:

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

Example:

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



Dir() Function

[edit | edit source]

We can get the folder contents (files & sub folders) using the Dir() function.

Syntax:

	Dir(cFolderPath) ---> List contains files & sub folders.

This function returns a list and each list item is a list of two items

  • File/sub folder name
  • Type (0 = File , 1 = Folder/Directory)

Example:

	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() Function

[edit | edit source]

We can rename files using the Rename() function

Syntax:

	Rename(cOldFileName,cNewFileName)

Example:

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

Remove() Function

[edit | edit source]

We can delete a file using the Remove() function


Syntax:

	Remove(cFileName)

Example:

	remove("test.txt")

Fopen() Function

[edit | edit source]

We can open a file using the Fopen() function

Syntax:

	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() Function

[edit | edit source]

When we open a file using fopen() function, we can close it using the Fclose() function

Syntax:

	Fclose(file handle)

Fflush() Function

[edit | edit source]

We can flushes the output buffer of a stream using the Fflush() function

Syntax:

	Fflush(file handle)

Freopen() Function

[edit | edit source]

We can open another file using the same file handle and at the same file close the old file

Syntax:

	Freopen(cFileName,cMode,file handle) ---> file handle

Example:

	freopen("myprogoutput.txt","w+",stdout)
	see "welcome" + nl
	for x = 1 to 10
		see x + nl
	next

/* ** Read : https://en.wikipedia.org/wiki/Device_file#Device_files ** The next code is not portable, we can use iswindows() before ** using it and we can write special code for each operating system. */

freopen("CON","w",stdout) # For Microsoft Windows see "Done" + nl # print to stdout again

Output:

	# Output to stdout
	Done

# Output to file : myprogoutput.txt welcome 1 2 3 4 5 6 7 8 9 10

Tempfile() Function

[edit | edit source]

The function Tempfile() creates a temp. file (binary).

The file will be deleted automatically when the stream is closed

Syntax:

	TempFile() ---> file handle


Tempname() Function

[edit | edit source]

We can generate temp. file name using the Tempname() function

The generated name will be different from the name of any existing file

Syntax:

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

Fseek() Function

[edit | edit source]

We can set the file position of the stream using the Fseek() function

Syntax:

	Fseek(file handle, nOffset, nWhence) ---> zero if successful

The next table presents the nWhence values

=====	===============================
Value	Description
=====	===============================
0       Beginning of file
1       Current position
2       End of file
=====	===============================

Ftell() Function

[edit | edit source]

We can know the current file position of a stream using the Ftell() function

Syntax:

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

Rewind() Function

[edit | edit source]

We can set the file position to the beginning of the file using the Rewind() function

Syntax:

	
	Rewind(file handle)

Fgetpos() Function

[edit | edit source]

We can get handle to the current file position using the Fgetpos() function

Syntax:

	Fgetpos(file handle) ---> position handle

Fsetpos() Function

[edit | edit source]

We can set the current file position using the Fgetpos() function

Syntax:

	Fsetpos(file handle,position handle)

Clearerr() Function

[edit | edit source]

We can clear the EOF error and the error indicators of a stream using the clearerr() function

Syntax:

	Clearerr(file handle)

Feof() Function

[edit | edit source]

We can test the end-of-file indicator using the Feof() function

Syntax:

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

Ferror() Function

[edit | edit source]

We can test the error indicator of a given stream using the Ferror() function

Syntax:

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

Perror() Function

[edit | edit source]

We can print error message to the stderr using the Perror() function

Syntax:

	Perror(cErrorMessage)

Fgetc() Function

[edit | edit source]

We can get the next character from the stream using the Fgetc() function

Syntax:

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


Fgets() Function

[edit | edit source]

We can read new line from the stream using the Fgets() function

Syntax:

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

The function stop when nSize characters are read, new line character is read or EOF.

Fputc() Function

[edit | edit source]

We can write a character to the stream using the Fputc() function

Syntax:

	Fputc(file handle,cChar)

Fputs() Function

[edit | edit source]

We can write a string to the stream using the Fputs() function

Syntax:

	Fputs(file handle,cString)


Ungetc() Function

[edit | edit source]

We can push a character to the stream using the Ungetc() function

The character will be available for the next read

Syntax:

	Ungetc(file handle,character)


Fread() Function

[edit | edit source]

We can read data from a stream using the Fread() function

Syntax:

	Fread(file handle,nSize)

Fwrite() Function

[edit | edit source]

We can write data to a stream using the Fwrite() function

Syntax:

	Fwrite(file handle,cString)


Fexists() Function

[edit | edit source]

We can check if a file exists using the Fexists() function

Syntax:

	Fexists(cFileName) ---> returns 1 if the file exists

Example:

	see fexists("b:\mahmoud\apps\ring\ring.exe") + nl +
	    fexists("b:\mahmoud\apps\ring\ring2.exe") + nl

Output:

	1
	0

Example

[edit | edit source]

The next program test some of the file functions

	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)