文件IO操作

 

1 Directory类型

2 File类型

3 FileStream类型

4 BinaryWriter和BinaryReader类型

5 StreamWriter和StreamReader类型

6 StringReader类型和StringWriter类型

7 使用内存流文件流读取数据

1 Directory类型    

static void Main(string[] args)

        {

            DirectoryInfo dir;

            if (!Directory.Exists(@"d:\root"))

            {

                dir = Directory.CreateDirectory(@"d:\root");

            }

            else

            {

                dir = new DirectoryInfo(@"d:\root");

            }

            foreach (FileInfo fileinfo in dir.GetFiles("*.cs"))

            {

                string name = fileinfo.FullName;

                long size = fileinfo.Length;

                DateTime createTime = fileinfo.CreationTime;

                Console.WriteLine("{0}{1}{2}",name,size,createTime);

            

            }

            Console.ReadLine();

        }

2 File类型

static void Main(string[] args)

        {

            if (File.Exists(@"d:\1.txt"))

            {

                File.Copy(@"d:\1.txt", @"d:\1backup.txt");//复制文件

                Console.WriteLine("备份完成");

            }

            else

            {

                Console.WriteLine("文件不存在");

            }

            Console.ReadLine();

        }

 

3 FileStream类型

 

namespace ConsoleApplication1

{

 //使用流的操作属于非托管资源的操作,程序代码必须显示的释放与其关联的资源,否则会出现内存泄露

    //将字符串转换为字节数组后才能进行流的操作,编码实现字符串类型转换为字节数组,流才能操作

    //本例还可以使用using的方式using (FileStream fsw = File.Create(File_name)){…}

   

    class Program

    {

        const string File_name = "test.data";

        static void Main(string[] args)

        {

            if (File.Exists(File_name))

            {

                File.Delete(File_name);

            }

            FileStream fsw = null;

            try

            {

                fsw = File.Create(File_name);//创建写入操作文件流

                string data = "王云鹏";

                UTF8Encoding encoding = new UTF8Encoding(true);//创建编码方式

                byte[] datas = encoding.GetBytes(data);//将字符串转换为字节数组

                fsw.Write(datas, 0, datas.Length);//通过文件流将字节数组写入磁盘

                fsw.Flush();//将缓冲区的内容写入文件流,清除该流的缓冲区

                Array.Clear(datas, 0, datas.Length);//清除字节数组

                //FileStream文件流本身支持缓冲区,但是并不会清除字节数组里面的内容

 

            }

            catch (Exception ex)

            {

 

                Console.WriteLine(ex.Message); ;

            }

            finally

            {

                if (fsw != null)

                {

                    fsw.Close();

                }

            }

            FileStream fsr = null;//读取文件流

            try

            {

                fsr = File.OpenRead(File_name);//创建文件流,操作方式为读取

                byte[] data = new byte[1024];//存放从流中读取的数据

                UTF8Encoding encoding = new UTF8Encoding(true);

                int length = 0;

                while ((length = fsr.Read(data, 0, data.Length)) > 0)

                {

                    Console.WriteLine(encoding.GetString(data, 0, data.Length));//将实际读取的字节长度转换为字符串输出到控制台

                }

            }

            catch (Exception ex)

            {

 

                Console.WriteLine(ex.Message); ;

            }

            finally

            {

                if (fsr != null)

                {

 

                    fsr.Close();//关闭流

                }

            }

            Console.ReadLine();

        }

        

    }

}

4 BinaryWriter和BinaryReader类型

namespace ConsoleApplication1

{

 //使用流的操作属于非托管资源的操作,程序代码必须显示的释放与其关联的资源,否则会出现内存泄露

    //将字符串转换为字节数组后才能进行流的操作,编码实现字符串类型转换为字节数组,流才能操作

    //本例还可以使用using的方式

   

    class Program

    {

        const string file_name = "test.data";

        static void Main(string[] args)

        {

            if (File.Exists(file_name))

            {

                File.Delete(file_name);//通过file类的delete方法删除文件

            }

            using (FileStream fs = new FileStream(file_name, FileMode.CreateNew))

            {

                using (BinaryWriter bw = new BinaryWriter(fs))

                {

                    bw.Write("王云鹏");

                }

            }

            using (FileStream fs = new FileStream(file_name, FileMode.Open, FileAccess.Read))

            {

                using (BinaryReader br = new BinaryReader(fs))

                {

                    try

                    {

                        while (true)

                        {

                            Console.WriteLine(br.ReadString());

                        }

                    }

                    catch (EndOfStreamException)

                    {

 

                        Console.WriteLine("文件读取已经完成!");

                    }

                }

            }

        }

        

    }

}

※    while (br.PeekChar() > -1)//判断是否已经读取完成

                    {

                        Console.WriteLine(br.ReadString());

                    }

5 StreamWriter和StreamReader类型

  class Program

    {

        const string file_name = "test.data";

        static void Main(string[] args)

        {

            using (StreamWriter sw = File.AppendText(file_name))

            {

//File.AppendText方法返回一个经过包装后的文件流给StreamWriter对象,同时还指定了写入文件流中字符串的编码格式为UTF-8

                sw.WriteLine("王云鹏");//直接将字符串写入到文件中的一行上

                sw.Flush();

            }

            using (StreamReader sr = File.OpenText(file_name))

            {

                string line = null;

                while ((line = sr.ReadLine()) != null)//直接从文件中读取一行字符串赋值给局部变量line

                {

                    Console.WriteLine(line);

                }

            }

        }

        

    }

 

 

    class Program

    {

        const string file_name = "test.data";

        static void Main(string[] args)

        {

            using (FileStream fs = File.Open(file_name, FileMode.Append, FileAccess.Write))

            {

                using (StreamWriter sw = new StreamWriter(fs))

                {

                    sw.WriteLine("王云鹏");

                    sw.Flush();

                }

            }

            using (FileStream fs = File.OpenRead(file_name))//读取文件操作

            {

                using (StreamReader sr = new StreamReader(fs))

                {

                    string line = null;

                    while ((line = sr.ReadLine()) != null)

                    {

                        Console.WriteLine(line);

                    }

 

                }

            }

        }

        

    }

 

class Program

    {

        const string file_name = "test.data";

        static void Main(string[] args)

        {

            using (FileStream fs = File.Open(file_name, FileMode.OpenOrCreate, FileAccess.Write))

            //FileMode.OpenOrCreat文件存在就打开文件,文件不存在就创建新文件

            {

                using (StreamWriter sw = new StreamWriter(fs))

                {

                    sw.BaseStream.Seek(0, SeekOrigin.End);//将打开文件流的指针从文件开头移向文件的末尾

                    sw.WriteLine("王云鹏");

                    sw.Flush();

                }

            }

            using (FileStream fs = File.OpenRead(file_name))//读取文件操作

            {

                using (StreamReader sr = new StreamReader(fs))

                {

                    string line = null;

                    while ((line = sr.ReadLine())!= null)

                    {

                        Console.WriteLine(line);

                    }

 

                }

            }

        }

        

    }

//使用Peek方法判断是否已经读取文件完成

while((sr.Peek()>-1))

{

  Console.WriteLine(sr.ReadLine());

}

 

 

 

 

6 StringReader类型和StringWriter类型

static void Main(string[] args)

        {

            string str = "Some number of charaters from.";

            char[] b=new char[str.Length];

            using (StringReader sr = new StringReader(str))

            {

                sr.Read(b,0,13);//读取字符串中前13个字符到字节数组中

                Console.WriteLine(b);//输出读取到字节数组中的内容

            }

}

 

StringWriter类型从字符串数组中指定的位置开始读取一定长度数量的字符,把他们写到现有字符串中

      static void Main(string[] args)

        {

            StringBuilder sb = new StringBuilder("Some number of charaters");

            char[] b = { ' ','t','o',' ','w','r','i','t','e'};

            using (StringWriter sw = new StringWriter(sb))

            {

                sw.Write(b,0,3);

            }

            Console.WriteLine(sb.ToString());

        }

7 使用内存流文件流读取数据

文件流是针对文件操作的,内存流是针对内存操作的

     private void button1_Click(object sender, EventArgs e)

        {

            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)

            {

                using (FileStream fs = File.Open(this.openFileDialog1.FileName, FileMode.Open, FileAccess.Read))

                {

                    byte[] bytes=new byte[fs.Length];//创建字节数组

                    fs.Read(bytes,0,bytes.Length);//将图片内容读取字节数组中

                    using (MemoryStream ms = new MemoryStream(bytes))//创建内存流

                    {

                        Image img = Image.FromStream(ms);//从内存流中获取图片对象

                        this.pictureBox1.Image =img;//将图片对象显示到用户界面上

                    }

                }

            }

        }

 

通过文件流读取图片

private void button1_Click(object sender, EventArgs e)

        {

            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)

            {

                using (FileStream fs = File.Open(this.openFileDialog1.FileName, FileMode.Open, FileAccess.Read))

                {

                  Image img=Image.FromStream(fs);//从文件流中直接读取图片

                  this.pictureBox1.Image = img;

                   

                 }

            }

        }

 

posted @ 2014-03-20 21:52  bradleydan  阅读(150)  评论(0)    收藏  举报