c# 窗体开发3 文件处理技术

本文详细介绍了C#中文件处理的各种技术,包括File、FileInfo、Directory类的使用,以及文件流FileStream的创建和操作。通过实例展示了如何创建、删除、移动目录,读写文本和二进制文件,以及使用MemoryStream和BufferedStream进行内存流操作。文章还涵盖了二进制文件的读写和文件属性的设置。
摘要由CSDN通过智能技术生成

以字节形式向磁盘写入数据通常称为字节流(比特流)

常常使用System.Io

常用的类

说明

File

提供用于创建、复制、删除、移动和打开文件的静态方法,并协助创建 FileStream 对象。

FileInfo

提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象。无法继承此类。

FileStream

公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。

BinaryReader

用特定的编码将基元数据类型读作二进制值。

BinaryWriter

以二进制形式将基元类型写入流,并支持用特定的编码写入字符串。

BufferedStream

给另一流上的读写操作添加一个缓冲层。无法继承此类。

Directory

公开用于创建、移动和枚举通过目录和子目录的静态方法。无法继承此类。

DirectoryInfo

公开用于创建、移动和枚举目录和子目录的实例方法。无法继承此类。

Path

对包含文件或目录路径信息的 String 实例执行操作。这些操作是以跨平台的方式执行的。

StreamReader

实现一个 TextReader,使其以一种特定的编码从字节流中读取字符。

StreamWriter

实现一个 TextWriter,使其以一种特定的编码向流中写入字符。

FileSysWatcher

侦听文件系统更改通知,并在目录或目录中的文件发生更改时引发事件。

基本使用类的介绍

1.1File

常用方法

类File提供用于创建、复制、删除、移动和打开文件的静态方法

方法

说明

Move

将指定文件移到新位置,并提供指定新文件名的选项。

Delete

删除指定的文件。如果指定的文件不存在,则不引发异常。

Copy

已重载。 将现有文件复制到新文件。

CreateText

创建或打开一个文件用于写入 UTF-8 编码的文本。

OpenText

打开现有 UTF-8 编码文本文件以进行读取。

Open

已重载。 打开指定路径上的 FileStream。

eg 

using System;
using System.IO;
class Test
{
    public static void Main()
    {
        string path = @"c:\temp\123.txt";
        if (!File.Exists(path))
        {
            // 创建文件以便写入内容。
            using (StreamWriter sw = File.CreateText(path))
            {
                sw.WriteLine("Hello");
                sw.WriteLine("And");
                sw.WriteLine("Welcome");
            }
        }
        // 打开文件从里面读数据。
        using (StreamReader sr = File.OpenText(path))
        {
            string s = "";
            while ((s = sr.ReadLine()) != null)
            {
                Console.WriteLine(s);
            }
        }
        try
        {
            string path2 = path + "temp";
            // 确认将要拷贝成的文件是否已经有同名的文件存在。
            File.Delete(path2);
            // 拷贝文件。
            File.Copy(path, path2);
            Console.WriteLine("{0} was copied to {1}.", path, path2);
            // 删除新生成的文件。
            File.Delete(path2);
            Console.WriteLine("{0} was successfully deleted.", path2);
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}

File 使用

1.2FileInfo

类FileInfo提供创建、复制、删除、移动和打开文件的实例方法,并且帮助创建 FileStream 对象。无法继承此类

属性

说明

Attributes        

获取或设置当前 FileSystemInfo 的 FileAttributes。(从 FileSystemInfo 继承。)

CreationTime 

获取或设置当前 FileSystemInfo 对象的创建时间。(从 FileSystemInfo 继承。)

Directory

获取父目录的实例。

DirectoryName

获取表示目录的完整路径的字符串。

Exists

已重写。获取指示文件是否存在的值。

Extension 

获取表示文件扩展名部分的字符串。(从 FileSystemInfo 继承。)

获取目录名

using System;
using System.IO;
class Test
{
    public static void Main()
{
        string fileName = "C:\\autoexec.bat";
            FileInfo fileInfo = new FileInfo(fileName);
            if (!fileInfo.Exists)
            {
                return;
            }
            Console.WriteLine("{0} has a directoryName of {1}",fileName,fileInfo.DirectoryName);
            /* 下面是代码的处理结果,
             * 实际的结果因机器不同:
             *
             * C:\autoexec.bat has a directoryName of C:\
             */
    }
}

代码

同磁盘下文件复制问题:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace FileOptionApplication
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /// <summary>
        /// 复制文本文件
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            string somefile = @"C:\Documents and Settings\Administrator\My Documents\SQL Server2000安装故障.txt";
            string target = @"c:\2.txt";
            if (!File.Exists(somefile))
            {
                MessageBox.Show("文件不存在!");
            }
            else
            {
                if (File.Exists(target))
                {
                    File.Delete(target);
                }
                File.Copy(somefile, target);
                MessageBox.Show("文件复制成功!");
            }
        }
         /// <summary>
        /// 创建文本文件
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            string target = @"c:\2.txt";
            if (File.Exists(target))
            {
                File.Delete(target);
            }
            File.CreateText(target);
        }
        /// <summary>
        /// 删除文本文件
        /// </summary>
        private void button3_Click(object sender, EventArgs e)
        {
            string target = @"c:\2.txt";
            if (File.Exists(target))
            {
                File.Delete(target);
                MessageBox.Show("文件删除成功!");
            }
        }
    }
}

------------------通过FileInfo类执行同样的复制

   private void button1_Click(object sender, EventArgs e)
        {
            string path = @"C:\WINDOWS\IE4 Error Log.txt";
            string target = @"c:\1.txt";
            FileInfo myfile = new FileInfo(path);
            if (!myfile.Exists)
            {
                MessageBox.Show("对不起,未发现路径文件!");
            }
            else
            {
                myfile.CopyTo(target);
                MessageBox.Show("复制成功!");
            }
       }

code

获取文件的基本信息

向一个Form窗体上拖拽三个Lable控件和一个Button控件,Button控件的text属性设置为“获取文件信息”

代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace FileOptionApplication
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }
         /// <summary>
        /// 获取文件信息单击事件
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            string somefile = @"C:\Documents and Settings\Administrator\My Documents\SQL Server2000安装故障.txt";
            FileInfo myfile = new FileInfo(somefile);
            if (myfile.Exists)
            {
                MessageBox.Show("文件已经存在");
                label1.Text = "文件创建时间:" + myfile.CreationTime.ToString();
                label2.Text = "文件夹:" + myfile.Directory.ToString();
                label3.Text = "文件夹名称:" + myfile.DirectoryName.ToString() + ",文件扩展名:" + myfile.Extension.ToString();
            }
            else
            {
                MessageBox.Show("文件并不存在");
            }
        }
    }
}

代码

1.3  Directory公开用于创建、移动和枚举通过目录和子目录的静态方法

常用的方法

方法

说明

Move

将文件或目录及其内容移到新位置。

Delete

已重载。 删除指定的目录。

CreateDirectory

已重载。 创建指定路径中的所有目录

GetCreationTime

获取目录的创建日期和时间。

GetCurrentDirectory

获取应用程序的当前工作目录。

GetFiles

已重载。 返回指定目录中的文件的名称

 目录创建了多少天

using System;
using System.IO;
 
class Test
{
    public static void Main()
    {
        try
        {
            // 获取当前目录的创建时间.
            DateTime dt = Directory.GetCreationTime(Environment.CurrentDirectory);
            // 给用户反馈信息.
            if (DateTime.Now.Subtract(dt).TotalDays > 364)
            {
                Console.WriteLine("This directory is over a year old.");
            }
            else if (DateTime.Now.Subtract(dt).TotalDays > 30)
            {
                Console.WriteLine("This directory is over a month old.");
            }
            else if (DateTime.Now.Subtract(dt).TotalDays <= 1)
            {
                Console.WriteLine("This directory is less than a day old.");
            }
            else
            {
                Console.WriteLine("This directory was created on {0}", dt);
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The process failed: {0}", e.ToString());
        }
    }
}

c_code

目录的相关操作

向一个Form窗体上拖拽五个Button控件,Button控件的text属性设置为“创建目录”、“删除目录”、“移动目录”、“目录创建时间”、“返回指定目录文件”

 

在类Form3里添加二个静态字段directory_path、directory_otherpath,都为string类型,分别代表工作目录路径和其他目录路径;双击“创建目录”、“删除目录”、“移动目录”、“目录创建时间”、“返回指定目录文件”

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.IO;
 
namespace FileOptionApplication
{
    public partial class Form3 : Form
    {
        public Form3()
        {
            InitializeComponent();
        }
        private static string directory_path = "c:\\qs250";
        private static string directory_otherpath = "c:\\qqqq";
        /// <summary>
        /// 删除目录鼠标单击事件
        /// </summary>
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                Directory.CreateDirectory(directory_path);
                button2.Enabled = true;
                button1.Enabled = false;
                button3.Enabled = true;
                button4.Enabled = true;
                button5.Enabled = true;
                MessageBox.Show("文件夹成功建立。", "警报");
            }
            catch (Exception mm)
            {
                MessageBox.Show("磁盘操作错误,原因:" + Convert.ToString(mm), "警报");
            }
        }
        /// <summary>
        /// 删除目录鼠标单击事件
        /// </summary>
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Directory.Delete(directory_path);
                button2.Enabled = false;
                button1.Enabled = true;
                button3.Enabled = false;
                button4.Enabled = false;
                button5.Enabled = false;
                MessageBox.Show("文件夹删除建立。", "警报");
            }
            catch (Exception mm)
            {
                MessageBox.Show("磁盘操作错误,原因:" + Convert.ToString(mm), "警报");
            }
        }
        /// <summary>
        /// 移动目录鼠标单击事件
        /// </summary>
        private void button3_Click(object sender, EventArgs e)
        {
            try
            {
                Directory.Move(directory_path, directory_otherpath);
                MessageBox.Show("文件夹移动成功。", "警报");
                //举例来讲,如果您尝试将c:\mydir 移到c:\public,并且c:\public 已存在,
                //则此方法引发IOException。您必须将“c:\\public\\mydir”指定为destDirName 参数,或者指定新目录名,例如“c:\\newdir”。
            }
            catch (Exception mm)
            {
                MessageBox.Show("磁盘操作错误,原因:" + Convert.ToString(mm), "警报");
            }
        }
        /// <summary>
        /// 目录创建时间鼠标单击事件
        /// </summary>
        private void button4_Click(object sender, EventArgs e)
        {
            try
            {
    MessageBox.Show(string.Format("{0:G}",Directory.GetCreationTime(directory_path)), "提示");
            //获取时间格式参见DateTimeFormatInfo
            }
            catch (Exception mm)
            {
                MessageBox.Show("磁盘操作错误,原因:" + Convert.ToString(mm), "警报");
            }
        }
        /// <summary>
        /// 返回指定目录文件鼠标单击事件
        /// </summary>
        private void button5_Click(object sender, EventArgs e)
        {
            try
            {
                string[] fileEntries = Directory.GetFiles(directory_path);
                if (fileEntries.Length != 0)
                {
                    foreach (string s in fileEntries)
                    {
                        if (File.Exists(s))
                        {
                            MessageBox.Show("内有文件信息:" + s, "提示");
                        }
                    }
                }
                else
                {
                    MessageBox.Show("空文件夹", "提示");
                }
                //获取时间格式参见DateTimeFormatInfo
            }
            catch (Exception mm)
            {
                MessageBox.Show("磁盘操作错误,原因:" + Convert.ToString(mm), "警报");
            }
        }
    }
}

文件夹的相关操作

1.4  file类读取文本文件的方法

方法

说明

CreateText(string FilePath)

创建或打开一个文件用于写入 UTF-8 编码的文本。

OpenText(string FilePath)

打开现有 UTF-8 编码文本文件以进行读取。

Open(string FilePath, FileMode)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值