Ⅰ C语言 对文件进行操作的三个主要过程是
C语言对文件进行操作的三个主要过程是:打开文件、操作文件、关闭文件。
C语言的文件处理功能依据系统是否设置“缓冲区”分为两种:一种是设置缓冲区,另一种是不设置缓冲区。
由于不设置缓冲区的文件处理方式,必须使用较低级的I/O函数(包含在头文件io.h和fcntl.h中)来直接对磁盘存取,这种方式的存取速度慢,并且由于不是C的标准函数,跨平台操作时容易出问题。
(1)文件读写过程扩展阅读
C语言文件有不同的类型,在程序设计中,主要用到两种文件:
(1)程序文件:包括源程序文件(后缀为.c)、目标文件(后缀为.obj)、可执行文件(后缀为.exe)等。这种文件的内容是程序代码。
(2)数据文件:文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行过程中供读入的数据。如一批学生的成绩数据、货物交易的数据等。
为了简化用户对输入输出设备的操作,使用户不必去区分各种输入输出设备之间的区别,操作系统把各种设备都统一作为文件来处理。从操作系统的角度看,每一个与主机相连的输入输出设备都看作一个文件。例如,终端键盘是输入文件,显示屏和打印机是输出文件。
输入输出是数据传送的过程,数据如流水一样从一处流向另一处,因此常将输入输出形象地称为流(stream),即数据流。流表示了信息从源到目的端的流动。在输入操作时,数据从文件流向计算机内存,在输出操作时,数据从计算机流向文件(如打印机、磁盘文件)。
C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限,两行数据间不会自动加分隔符,对文件的存取是以字符(字节)为单位的。输入输出数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制,这就增加了处理的灵活性。
Ⅱ java对文件进行读写操作的过程是什么
打开文件 — 产生句抄柄 — 权限袭 — 转换成流 — 读取 — 关闭句柄 — 关闭文件打开文件 — 产生句柄 — 权限 — 加锁 — 是否追加写入 — 写流 — 关闭句柄 — 关闭文件
Ⅲ MFC如何读取文件到内存,再写到磁盘
读入内存是你自己写的,当然也可以让一个图片对象自己读进来,读写的底层过程是用createfile打开,然后用readfile来读取数据到你自己指定的内存存储区,然后你可以在把它写到其他地方,需要你在其它地方在创建一个文件仍然是createfile,然后用writefile写入就行。。。。我说的是windows API实现,任何被封装的类都需要靠这种方法。。。。但对于C++可以使用iostream这样的类,但他们也是在使用createfile 这写API函数。。。至于MFC我并不会用,但底层的方法他还是支持的,就这3个函数就行, createfile writefile reatefile,任何语言都支持,这是windows提供的,所以需要将其连接WIN32.dll连接进来,MFC怎么做我并不会,但C和C++只要写#include<windows.h>即可。。。
Ⅳ java对文件进行读写操作的过程是什么
差不多就是下面这样 is = null;OutputStream out = null;try {File file = new File("c:\\test.txt");File newFile = new File("d:\\test.txt");is = new FileInputStream(file);out = new FileOutputStream(newFile);byte[] b = new byte[1024];while(is.read(b) > 0){out.write(b);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}finally{if(is != null){try {is.close();} catch (IOException e) {e.printStackTrace();}}if(out != null){try {out.close();} catch (IOException e) {e.printStackTrace();}}}
Ⅳ C语言中文件的读写实际过程
rb和r其实没多大区别,本质上都是二进制数据流,只不过文本用的二进制数据的意义为ASCII或其它内码。相对于rb/wb重要的一点区别在于,r/w的文本换行格式在不同系统上有区别(DOS/Windows下是回车符CR('\r')+换行符LF('\n'),UNIX/Linux下是LF,MAC下是CR),引起了文件操作的一些细节(例如fputs和fprintf对于字符串末尾的处理)上的差异。至于具体的读写实现,由库函数进行处理。wb/rb方式一般采用缓冲读写,最终借助系统底层的代码实现对外存文件或其它输入/输出流的抽象(包括在内存中建立缓冲区)和位复制(bitwise )。w/r方式在此基础上处理了上述的一些差异性问题。一般情况下,对于缓冲区的操作取决于库函数的实现,对于用户来说是不可见的,因为这不必要(不同平台的实现不能保证一致)。至于键盘这种标准输入设备,被抽象为标准输入流stdin,除了抽象过程本身(由底层系统实现)外,在实现方式上和从外存文件读入没有本质上的区别。====[原创回答团]
Ⅵ C#中读取和写入文件的过程,常用哪几类
1、使用FileStream读写文件 文件头:复制代码代码如下:using System;using System.Collections.Generic;using System.Text;using System.IO;读文件核心代码:复制代码代码如下:byte[] byData = new byte[100];char[] charData = new char[1000];try{FileStream sFile = new FileStream("文件路径",FileMode.Open);sFile.Seek(55, SeekOrigin.Begin);sFile.Read(byData, 0, 100); //第一个参数是被传进来的字节数组,用以接受FileStream对象中的数据,第2个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件读多少字符.}catch (IOException e){Console.WriteLine("An IO exception has been thrown!");Console.WriteLine(e.ToString());Console.ReadLine();return;}Decoder d = Encoding.UTF8.GetDecoder();d.GetChars(byData, 0, byData.Length, charData, 0);Console.WriteLine(charData);Console.ReadLine();写文件核心代码:复制代码代码如下:FileStream fs = new FileStream(文件路径,FileMode.Create);//获得字节数组byte [] data =new UTF8Encoding().GetBytes(String);//开始写入fs.Write(data,0,data.Length);//清空缓冲区、关闭流fs.Flush();fs.Close();2、使用StreamReader和StreamWriter文件头:复制代码代码如下:using System;using System.Collections.Generic;using System.Text;using System.IO;StreamReader读取文件:复制代码代码如下:StreamReader objReader = new StreamReader(文件路径);string sLine="";ArrayList LineList = new ArrayList(); while (sLine != null){sLine = objReader.ReadLine();if (sLine != null&&!sLine.Equals(""))LineList.Add(sLine);}objReader.Close();return LineList;StreamWriter写文件:复制代码代码如下:FileStream fs = new FileStream(文件路径, FileMode.Create);StreamWriter sw = new StreamWriter(fs);//开始写入sw.Write(String);//清空缓冲区sw.Flush();//关闭流sw.Close();fs.Close();方式一:用FileStream复制代码代码如下://实例化一个保存文件对话框SaveFileDialog sf = new SaveFileDialog();//设置文件保存类型sf.Filter = "txt文件|*.txt|所有文件|*.*";//如果用户没有输入扩展名,自动追加后缀sf.AddExtension = true;//设置标题sf.Title = "写文件";//如果用户点击了保存按钮if(sf.ShowDialog()==DialogResult.OK){//实例化一个文件流—>与写入文件相关联FileStream fs = new FileStream(sf.FileName,FileMode.Create);//获得字节数组byte [] data =new UTF8Encoding().GetBytes(this.textBox1.Text);//开始写入fs.Write(data,0,data.Length);//清空缓冲区、关闭流fs.Flush();fs.Close();}方式二:用StreamWriter复制代码代码如下://实例化一个保存文件对话框SaveFileDialog sf = new SaveFileDialog();//设置文件保存类型sf.Filter = "txt文件|*.txt|所有文件|*.*";//如果用户没有输入扩展名,自动追加后缀sf.AddExtension = true;//设置标题sf.Title = "写文件";//如果用户点击了保存按钮if (sf.ShowDialog() == DialogResult.OK){//实例化一个文件流—>与写入文件相关联FileStream fs = new FileStream(sf.FileName, FileMode.Create);//实例化一个StreamWriter–>与fs相关联StreamWriter sw = new StreamWriter(fs);//开始写入sw.Write(this.textBox1.Text);//清空缓冲区sw.Flush();//关闭流sw.Close();fs.Close();}string FileName = Guid.NewGuid().ToString() + ".txt"; //GUID生成唯一文件名StringBuilder ckpw = new StringBuilder("\"凭证输出\", \"V800\", \"001\", \"东风随州专用汽车有限公司\"," + "\"F89自由项16\", \"F90审核日期:\"");if (!FileIO.IsFolderExists(Server.MapPath("pzsc")))FileIO.CreaterFolder(Server.MapPath(""), "file://pzsc/");string filePath = Server.MapPath("pzsc") + "\\" + FileName;System.IO.StreamWriter sw = new System.IO.StreamWriter(filePath, false, Encoding.GetEncoding("GB2312"));//创建的时候需要指定编码格式,默认是UTF-8,中文显示乱码sw.WriteLine(ckpw.ToString());sw.Close();方式三:用BinaryWriter复制代码代码如下://实例化一个保存文件对话框SaveFileDialog sf = new SaveFileDialog();//设置文件保存类型sf.Filter = "txt文件|*.txt|所有文件|*.*";//如果用户没有输入扩展名,自动追加后缀sf.AddExtension = true;//设置标题sf.Title = "写文件";//如果用户点击了保存按钮if (sf.ShowDialog() == DialogResult.OK){//实例化一个文件流—>与写入文件相关联FileStream fs = new FileStream(sf.FileName, FileMode.Create);//实例化BinaryWriterBinaryWriter bw = new BinaryWriter(fs);bw.Write(this.textBox1.Text);//清空缓冲区bw.Flush();//关闭流bw.Close();fs.Close();}C#缓存流示例——>用缓存流复制文件C#文件处理操作必须先导入命名空间:using System.IO;背景:使用VS2005、一个按钮、一个窗体、C#缓存流、把D:\KuGoo\爱得太多.wma复制到D:\并更名为love.wma,即:D:\love.wma在按钮的Click事件中添加如下代码:复制代码代码如下:private void button1_Click(object sender, EventArgs e){//创建两个文件流 一个是源文件相关,另一个是要写入的文件FileStream fs = new FileStream(@"D:\KuGoo\爱得太多.wma",FileMode.Open);FileStream fs2 = new FileStream(@"D:\love.wma",FileMode.Create);//创建一个字节数组,作为两者之间的媒介//好比两个人拿苹果,这个字节数组就好比一个篮子,一个人作死的把苹果送到篮子里面,//而我就可以作死得拿苹果,通过这个媒介我们互不干扰,//不需要互相等待【她往篮子里面放了苹果我才可以去拿】,提高了效率byte[] data = new byte[1024];//创建两个缓冲流,与两个文件流相关联BufferedStream bs = new BufferedStream(fs);BufferedStream bs2= new BufferedStream(fs2);//fs作死的读,fs2作死的写,直到fs没有字节可读fs2就不写了//好比,一个人作死的往篮子里面丢苹果,另一个人作死得往篮子里面拿苹果,直到篮子里面没有苹果拿了为止//即–>那个人没有苹果往篮子里面放了while(fs.Read(data,0,data.Length)>0){fs2.Write(data,0,data.Length);fs2.Flush();}//关闭流,好比两个人累了,都要休息 呵呵o(∩_∩)o…fs.Close();fs2.Close();}C#内存流示例—–>用内存流来读取图片C#文件处理操作必须先导入命名空间:using System.IO;背景:一个窗体、一个pictureBox、一个lable[没有选择图片,lable的text为"图片未选择"],在pictureBox1的Click事件中添加如下代码:复制代码代码如下:private void pictureBox1_Click(object sender, EventArgs e){//实例化一个打开文件对话框OpenFileDialog op = new OpenFileDialog();//设置文件的类型op.Filter = "JPG图片|*.jpg|GIF图片|*.gif";//如果用户点击了打开按钮、选择了正确的图片路径则进行如下操作:if(op.ShowDialog()==DialogResult.OK){//清空文本this.label1.Text = "";//实例化一个文件流FileStream fs = new FileStream(op.FileName, FileMode.Open);//把文件读取到字节数组byte[] data = new byte[fs.Length];fs.Read(data, 0, data.Length);fs.Close();//实例化一个内存流—>把从文件流中读取的内容[字节数组]放到内存流中去MemoryStream ms = new MemoryStream(data);//设置图片框 pictureBox1中的图片this.pictureBox1.Image = Image.FromStream(ms);}}
Ⅶ java 中简述使用流进行读写文本文件的步骤
读写是两个不同的分支,通常都是分开单独使用的。
可以通过BufferedReader 流的形式进行流缓存,之后通过readLine方法获取到缓存的内容。BufferedReader bre = null;try {String file = "D:/test/test.txt";bre = new BufferedReader(new FileReader(file));//此时获取到的bre就是整个文件的缓存流while ((str = bre.readLine())!= null) // 判断最后一行不存在,为空结束循环{System.out.println(str);//原样输出读到的内容};备注: 流用完之后必须close掉,如上面的就应该是:bre.close(),否则bre流会一直存在,直到程序运行结束。
可以通过“FileOutputStream”创建文件实例,之后过“OutputStreamWriter”流的形式进行存储,举例:
OutputStreamWriter pw = null;//定义一个流pw = new OutputStreamWriter(new FileOutputStream(“D:/test.txt”),"GBK");//确认流的输出文件和编码格式,此过程创建了“test.txt”实例pw.write("我是要写入到记事本文件的内容");//将要写入文件的内容,可以多次writepw.close();//关闭流备注:文件流用完之后必须及时通过close方法关闭,否则会一直处于打开状态,直至程序停止,增加系统负担。
Ⅷ Android开发之如何读写文件
【转】
首先介绍如何存储数据,显然,要将数据从应用中输出到文件中,必须得到一个输出流outPutStream,然后往输出流中写入数据,在这里Android自带了一个得到应用输出流的方法
FileOutputStream fos =context.openFileOutput(“yuchao.txt”,Context.MODE_PRIVATE); (1)
其中第一个属性为文件名,第二个属性为读写模式(有关读写模式的说明下面将详细阐述),
然后在文件输出流fos中便可以写入数据
Fos.write(“Hi,”I’m Chao Yu!”.getBytes());
用完文件输出流之后记得关闭
fos.close();
这样,在/data/data/packageName/file目录下就生成了一个文件名为yuchao.txt的文件,文件中的内容为” Hi,I’m Chao Yu!”
有关(1)中读写模式其实就是制定创建文件的权限以及在读写的时候的方式,Android中提供了以下几种读写模式
Context.MODE_PRIVATE = 0
该模式下创建的文件其他应用无权访问,并且本应用将覆盖原有的内容
Context.MODE_APPEND = 32768
该模式下创建的文件其他应用无权访问,并且本应用将在原有的内容后面追加内容
Context.MODE_WORLD_READABLE = 1
该模式下创建的文件其他应用有读的权限
Context.MODE_WORLD_WRITEABLE = 2
该模式下创建的文件其他应用有写的权限
如果需要将文件设置为外部应用可以读写,可将读写模式设置为Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEABLE
一般情况下,各个应用维护的数据都在一个特定的文件夹中,即上面所提到的/data/data/packageName/file(存在于手机存储中),但手机内存毕竟有限,所以有些情况下,我们需要往SD卡中写入数据文件,这其实和普通的java web 应用步骤一样,都是先创建特针对特定目录特定文件的输出流,然后往输出流中写数据,这里要注意一个方法,就是获取SD卡根目录的方法,随着Android系统不断升级,SD卡的根目录随时都有可能改变,Android中得到SD卡根目录的方法是
File sdCardDir = Environment.getExternalStorageDirectory();
然后就可以进行下面的步骤
File saveFile = new File(sdCardDir, “yuchao.txt”);
FileOutputStream outStream = new FileOutputStream(saveFile);
outStream.write("Hi,I’m ChaoYu".getBytes());
outStream.close();
值得注意的是,在往SD卡中写数据的时候,健壮的代码必须考虑SD卡不存在或者写保护的情况,故在写入之前,先做判断
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
……
}
接着,我们来学习下我们的应用程序如何读取文件中的数据,其实就是写的逆向过程
若要读取应用程序默认维护的文件(即/data/data/packageName/file目录下的文件),首先得到文件输入流
FileInputStream istream = this.context.openFileInput(“yuchao.txt”);
然后在内存中开辟一段缓冲区
byte[] buffer = new byte[1024];
然后创建一个字节数组输出流
ByteArrayOutputStream ostream = new ByteArrayOutputStream();
读出来的数据首先放入缓冲区,满了之后再写到字符输出流中
while((len=istream.read(buffer))!=-1){
ostream.write(buffer, 0, len);
}
最后关闭输入流和输出流
istream.close();
ostream.close();
将得到的内容以字符串的形式返回便得到了文件中的内容了,这里的流操作较多,故以一张图片来说明,见图1
return new String(ostream.toByteArray());
从SD卡中读取数据与上述两个步骤类似,故不再赘述,留给读者自己思考
如在开发过程中进行SD卡地读写,切忌忘了加入权限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
至此,Android系统中有关文件数据的读写介绍完毕。
Ⅸ java中对文件进行读写操作的基本类是什么
Java.io包中包括许多类提供许多有关文件的各个方面操作。1 输入输出抽象基类InputStream/OutputStream ,实现文件内容操作的基本功能函数read()、 write()、close()、skip()等;一般都是创建出其派生类对象(完成指定的特殊功能)来实现文件读写。在文件读写的编程过程中主要应该注意异常处理的技术。 2 FileInputStream/FileOutputStream: 用于本地文件读写(二进制格式读写并且是顺序读写,读和写要分别创建出不同的文件流对象); 本地文件读写编程的基本过程为: ① 生成文件流对象(对文件读操作时应该为FileInputStream类,而文件写应该为FileOutputStream类); ② 调用FileInputStream或FileOutputStream类中的功能函数如read()、write(int b)等)读写文件内容; ③ 关闭文件(close())。 3 PipedInputStream/PipedOutputStream: 用于管道输入输出(将一个程序或一个线程的输出结果直接连接到另一个程序或一个线程的输入端口,实现两者数据直接传送。操作时需要连结); 4管道的连接: 方法之一是通过构造函数直接将某一个程序的输出作为另一个程序的输入,在定义对象时指明目标管道对象 PipedInputStream pInput=new PipedInputStream(); PipedOutputStream pOutput= new PipedOutputStream(pInput); 方法之二是利用双方类中的任一个成员函数 connect()相连接 PipedInputStream pInput=new PipedInputStream(); PipedOutputStream pOutput= new PipedOutputStream(); pinput.connect(pOutput); 5 管道的输入与输出: 输出管道对象调用write()成员函数输出数据(即向管道的输入端发送数据);而输入管道对象调用read()成员函数可以读起数据(即从输出管道中获得数据)。这主要是借助系统所提供的缓冲机制来实现的。 6随机文件读写: RandomAccessFile类(它直接继承于Object类而非InputStream/OutputStream类),从而可以实现读写文件中任何位置中的数据(只需要改变文件的读写位置的指针)。 随机文件读写编程的基本过程为: ① 生成流对象并且指明读写类型; ② 移动读写位置; ③ 读写文件内容; ④ 关闭文件。七里河团队答疑助人,希望我的回答对你有所帮助
Ⅹ C语言的文件读写
回车和换行符转换成一个换行符–书本用的是老概念。键盘输入,我们按Enter键,C/C++语言收到的就是'\n'(新行符)。打字机老概念:回车和换行,回车就是回到本行开始位置,换行就是到下一行。回车符'\r',换行符'\n',老码CRLF。“从键盘输入4个学生的数据是ASCII码,也就是文本文件”,把“也就是文本文件”删去。键盘输入是输入流,不叫文件。“r”方式读入–fopen(文件名,"r")–用"r"方式打开,是作为文本文件打开,用于读。而不是用二进制方式。文件用wb方式打开和写成的,必须用rb方式打开和读入.带b用于二进制文件。不带b用于文本文件(ASCII文件).