码迷,mamicode.com
首页 > 其他好文 > 详细

IO流相关01

时间:2014-07-14 20:19:03      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   文件   数据   

File类的常用静态方法:

  1. void AppendAllText(string path, string contents),将文本contents附加到文件path中
  2. bool Exists(string path)判断文件path是否存在
  3. string ReadAllText(string path) 读取文本文件到字符串
  4. string[] ReadAllLines(string path) 读取文本文件到字符串数组
  5. void WriteAllText(string path, string contents)将字符串contents保存到文件path中,会覆盖旧内容。
  6. WriteAllLines(string path,string[] contents),将字符串数组逐行保存到文件path中,会覆盖旧内容。

 

Directory类的常用静态方法:

  1. Delete(string path, bool recursive) 删除目录, recursive表示是否递归删除,如果recursive为false则只能删除空目录
  2. bool Exists(string path) 判断目录是否存在
  3. CreateDirectory:创建文件夹
  4. string[] GetDirectories(string path) 得到一个目录下的子目录
  5. string[] GetDirectories(string path, string searchPattern, SearchOption searchOption) 通配符查找目录下的子目录
  6. static string[] GetFiles(string path) 得到一个目录下的文件
  7. string[] GetFiles(string path, string searchPattern, SearchOption searchOption) 通配符查找目录下的文件
  8. DirectoryInfo GetParent(string path) 得到目录的父目录
        ListAll(@"f:\");-------------执行方法!!

        /// <summary>
        /// 递归调用,列出某目录下的所有.jpg文件
        /// </summary>
        /// <param name="dir"></param>
        static void ListAll(string dir)
        {
            //得到目录下的所有文件
            string[] files = Directory.GetFiles(dir);
            foreach (string file in files)
            {
                if (file.EndsWith(".jpg"))
                {
                    Console.WriteLine(file);
                }
            }
            //得到目录下的所有子目录名称
            string[] dirs = Directory.GetDirectories(dir);
            foreach (string d in dirs)
            {
                //递归调用ListAll方法
                ListAll(d);
            }
        }

 

Path类常用静态方法:

string ChangeExtension(string path, string extension) (*) 修改文件的后缀,“修改”支持字符串层面的,没有真的给文件改名string s = Path.ChangeExtension(@"C:\temp\F3.png", "jpg")

string Combine(string path1, string path2) 将两个路径合成一个路径,比用+好,可以方便解决是不是加斜线的问题,自动处理路径分隔符的问题 string s = Path.Combine(@"c:\temp","a.jpg")

string GetDirectoryName(string path) (*) 得到文件的路径名。Path.GetDirectoryName(@"c:\temp\a.jpg")-----返回 c:\temp

string GetExtension(string path) 得到文件的扩展名

string GetFileName(string path) 得到文件路径的文件名部分

string GetFileNameWithoutExtension(string path) 得到去除扩展名的文件名

string GetFullPath(string path) 得到文件的全路径。”.\”当前路径,”..\”上一级路径,”..\..\”上一级的上一级

string GetTempFileName() 得到一个唯一的临时文件名(*)

string GetTempPath() 得到临时文件夹的路径(*)

得到当前exe的路径。Assembly.GetExecutingAssembly(),不要用Directory.GetCurrentDirectory(),这个可能会变(使用OpenFileDialog或者SetCurrentDirectory())。(*)解决Access文件路径的问题。

 1             //得到当前执行的exe路径
 2             string location = Assembly.GetExecutingAssembly().Location;
 3 
 4             //得到当前exe所在的文件夹目录---出去路径中的*.exe
 5             string locDir = Path.GetDirectoryName(location);
 6 
 7             //合并两个路径字符串,
 8             string newFileName = Path.Combine(locDir, "1.txt");
 9 
10             //File.ReadAllText读取指定文件的所有行,返回string类型
11             //File.ReadAllLines返回为string[]数组
12             Console.WriteLine(File.ReadAllText(newFileName, Encoding.Default));

 

FileStream类常用静态方法:

  1. 用File.ReadAllText、File.WriteAllText进行文件读写是一次性读、写,如果文件非常大会占内存、慢。
  2. 需要读一行处理一行的机制,这就是流(Stream)。Stream会只读取要求的位置、长度的内容。
  3. using (FileStream inputStream = new FileStream(textBox1.Text, FileMode.Open))----FileMode.Open表示为读入流
  4. using (FileStream outputStream = new FileStream(textBox2.Text, FileMode.Create))----FileMode.Create表示输出流
  5. byte[]是任何数据的最根本表示形式,任何数据最终都是二进制。
  6. readBytes=inputStream.Read(bytes,0,bytes.Length)----表示从流中读取字节块并将该数据写入给定的缓冲区(bytes)中

练习:文件加密(每一位用255-r)

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.IO;
 7 using System.Text;
 8 using System.Windows.Forms;
 9 
10 namespace FileStream加密
11 {
12     public partial class Form1 : Form
13     {
14         public Form1()
15         {
16             InitializeComponent();
17         }
18 
19         private void button1_Click(object sender, EventArgs e)
20         {
21             //初始化一个OpenFileDialog类 
22             OpenFileDialog fileDialog = new OpenFileDialog();
23 
24             //判断用户是否正确的选择了文件 
25             if (fileDialog.ShowDialog() == DialogResult.OK)
26             {
27                 //将用户选取的路径保存在文本框中
28                 textBox1.Text = fileDialog.FileName;
29 
30             }
31         }
32 
33         private void button2_Click(object sender, EventArgs e)
34         {
35 
36 
37             //实例化一个读文件流的实例----Open
38             using (FileStream inputStream = new FileStream(textBox1.Text, FileMode.Open))
39             {
40                 //进度条代码
41                 //获取目标文件的大小,FileInfo表示系统查看文件的大小(相当于右击,查看属性),而不是读入内存查看大小
42                 FileInfo fileInfo = new FileInfo(textBox1.Text);
43 
44                 //fileInfo.Length返回当前文件的大小,是long类型,必须显示转换成int类型
45                 //progressBar1.Maximum是指进度条的最大值
46                 progressBar1.Maximum =(int) fileInfo.Length;
47 
48                 //实例化一个写文件流的实例----Create
49                 using (FileStream outputStream = new FileStream(textBox2.Text, FileMode.Create))
50                 {
51                     //缓冲区,就是一次读写的大小
52                     byte[] bytes = new byte[1024 * 1024 * 4];
53                     //表示当前读取大小的变量
54                     int readBytes;
55 
56                     //表示从流中读取字节块并将该数据写入给定的缓冲区(bytes)中
57                     //从当前位置的偏移量0开始读取,就是从当前位置开始读取
58                     //读取最多bytes.Length这么大
59                     //readBytes=inputStream.Read(bytes,0,bytes.Length是赋值表达式,它的值等于最终的值
60                     //例如:int a=1++;赋值表达式的值等于2
61                     while((readBytes=inputStream.Read(bytes,0,bytes.Length))>0)
62                     {
63                         //对读取出的数据进行加密处理
64                         //bytes是规定的缓冲区大小,即最大的读取数量
65                         //readBytes是实际的读取大小
66                         for (int i = 0; i < readBytes; i++)
67                         {
68                             //将每个字节都用Byte.MaxValue---255减去,然后另存
69                             bytes[i] = (byte)(Byte.MaxValue - bytes[i]);
70                         }
71                         //输出流从缓冲区读取数据写入该流
72                         outputStream.Write(bytes, 0, readBytes);
73 
74                         //进度条的当前值等于写入值的大小
75                         progressBar1.Value = progressBar1.Value + readBytes;
76                     }
77                     //表示写入完毕
78                     if (progressBar1.Value == progressBar1.Maximum)
79                     {
80                         MessageBox.Show("ok");
81                     }
82                 }
83             }
84         }
85     }
86 }

 

IO流相关01,布布扣,bubuko.com

IO流相关01

标签:style   blog   color   使用   文件   数据   

原文地址:http://www.cnblogs.com/skyl/p/3842706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!