函数式编程 - 文件 I/O 操作
当程序终止时,我们需要文件来存储程序的输出。 通过文件,我们可以使用不同语言的各种命令来访问相关信息。
这里列出了可以对文件执行的一些操作 −
- 创建新文件
- 打开现有文件
- 读取文件内容
- 搜索文件中的数据
- 写入新文件
- 将内容更新到现有文件
- 删除文件
- 关闭文件
写入文件
要将内容写入文件,我们首先需要打开所需的文件。 如果指定的文件不存在,则会创建一个新文件。
让我们看看如何使用 C++ 将内容写入文件。
示例
#include <iostream> #include <fstream> using namespace std; int main () { ofstream myfile; myfile.open ("Tempfile.txt", ios::out); myfile << "Writing Contents to file. "; cout << "Data inserted into file"; myfile.close(); return 0; }
注意 −
fstream是用于控制文件读写操作的流类。
ofstream是用于将内容写入文件的流类。
让我们看看如何使用 Erlang(一种函数式编程语言)将内容写入文件。
-module(helloworld). -export([start/0]). start() -> {ok, File1} = file:open("Tempfile.txt", [write]), file:write(File1,"Writting contents to file"), io:fwrite("Data inserted into file ").
注意 −
要打开文件,我们必须使用open(filename,mode)。
将内容写入文件的语法:write(filemode,file_content)。
输出 − 当我们运行此代码时,"将内容写入文件"将被写入文件 Tempfile.txt 中。 如果该文件有任何现有内容,那么它将被覆盖。
从文件中读取
要读取文件,首先我们必须以读取模式打开指定的文件。 如果文件不存在,则其各自的方法返回 NULL。
下面的程序展示了如何用C++读取文件的内容 −
#include <iostream> #include <fstream> #include <string> using namespace std; int main () { string readfile; ifstream myfile ("Tempfile.txt",ios::in); if (myfile.is_open()) { while ( getline (myfile,readfile) ) { cout << readfile << ' '; } myfile.close(); } else cout << "file doesn't exist"; return 0; }
它将产生以下输出 −
Writing contents to file
注意 − 在此程序中,我们使用"ios::in"以读取模式打开一个文本文件,然后在屏幕上打印其内容。 我们使用 while 循环通过"getline"方法逐行读取文件内容。
以下程序展示了如何使用 Erlang 执行相同的操作。 在这里,我们将使用 read_file(filename) 方法从指定文件中读取所有内容。
-module(helloworld). -export([start/0]). start() -> rdfile = file:read_file("Tempfile.txt"), io:fwrite("~p~n",[rdfile]).
它将产生以下输出 −
ok, Writing contents to file
删除现有文件
我们可以使用文件操作删除现有文件。 以下程序演示如何使用 C++ 删除现有文件 −
#include <stdio.h> int main () { if(remove( "Tempfile.txt" ) != 0 ) perror( "File doesn’t exist, can’t delete" ); else puts( "file deleted successfully " ); return 0; }
它将产生以下输出 −
file deleted successfully
下面的程序展示了如何在 Erlang 中执行相同的操作。 在这里,我们将使用方法delete(filename)来删除现有文件。
-module(helloworld). -export([start/0]). start() -> file:delete("Tempfile.txt").
输出 − 如果文件"Tempfile.txt"存在,则将其删除。
确定文件的大小
以下程序显示如何使用 C++ 确定文件的大小。 此处,函数 fseek 将与流关联的位置指示符设置为新位置,而 ftell 返回流中的当前位置。
#include <stdio.h> int main () { FILE * checkfile; long size; checkfile = fopen ("Tempfile.txt","rb"); if (checkfile == NULL) perror ("file can’t open"); else { fseek (checkfile, 0, SEEK_END); // non-portable size = ftell (checkfile); fclose (checkfile); printf ("Size of Tempfile.txt: %ld bytes. ",size); } return 0; }
输出 − 如果文件"Tempfile.txt"存在,则会显示其大小(以字节为单位)。
下面的程序展示了如何在 Erlang 中执行相同的操作。 在这里,我们将使用方法 file_size(filename) 来确定文件的大小。
-module(helloworld). -export([start/0]). start() -> io:fwrite("~w~n",[filelib:file_size("Tempfile.txt")]).
输出 − 如果文件"Tempfile.txt"存在,则会显示其大小(以字节为单位)。 否则,将显示"0"。