栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > .Net

【.net】C#关于如何创建文件、读取文件数据、向文件写数据

.Net 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【.net】C#关于如何创建文件、读取文件数据、向文件写数据

文件是什么?
文件是永久存储在磁盘等介质上的一组数据,每文件都有其唯一的文件名,操作系统通过唯一的文件名对文件进行管理。


一、System.IO模型

在.net中的System.IO(文件操作类库)模型提供了很多针对文件的、文件夹的操作,以流的方式对各种数据文件进行访问。
System.IO中包含的各种类,可用于文件的创建、读/写、复制、移动和删除等操作。

System.IO命名空间中常用到的类

类说明
Directory用于创建、移动目录和子目录,即文件夹
File用于创建、复制、删除、移动和打开文件
FileStream文件字节流,对文进行读取、写入、打开和关闭
StreamWrite文本文件数据写入
StreamReader文本文件数据读取
……

当然还有很多其它的,以上只列举几个平时我经常用到的。


1、Directory类

Directory类提供了对文件夹的各种操作方法

方法说明使用
CreateDirectory创建所有目录或子目录Directory.CreateDirectory(@“f:new_directory”)
Delete从指定路径删除目录Directory.Delete(@“f:new_directory”,true) true,将删除整个目录;false,目录为空才删除
Exists判断文件夹是否存在,返回布尔类型if (Directory.Exists(@“f:new_directory”))
Move移动文件夹的位置Directory.Move()
GetFiles返回指定目录中的所有文件名称Directory.GetFiles()
GetDirectories返回指定目录中子目录的名称Directory.GetDirectories()
GetCreationTime返回指定目录的创建时间Directory.GetCreationTime()
………

2、File类

Directory类提供了对文件的各种操作方法,协助创建FileStream类

方法说明使用
Copy将现有文件复制到新文件中File.Copy(@“f:new_directoty1.txt”,@“f:new_directory2.txt”)
Create创建新的文件File.Create(@“f:new_directory”)
Delete从指定路径删除文件File.Delete(@“f:new_directory”)
Exist判断文件是否存在,返回布尔类型if (File.Exists(@“f:new_directory”))
Move移动文件的位置,并提供指定新文件名File.Move(@“f:new_directory1.txt”,@“f:two_directory1.txt”)
Open打开指定路径上的FileStreamFile.Open(@“f:new_directory1.txt”,FileMode.Append)
OpenRead打开现有文件进行读取File.OpenRead(@“f:new_directory1.txt”)
OpenWrite打开现有文件进行写入File.OpenWrite(@“f:new_directory1.txt”)
………

3、FileStream类

FileStream类产生文件流,对文件进行读取、写入、打开和关闭等操作。其数据是字节流,只能进行字节的读写。

方法说明
Close?关闭当前文件流,并释放相关资源
Flush清除文件流的所有缓冲区
Lock防止其它进程更改FileStream
Read从流中读取数据,返回字节数组
Seek将流当前的位置设置为定值
Write使用从缓冲区读取的数据将字节写入该流
……

FileStream类还提供了很多构造函数

以public FileStream(string path, FileMode mode, FileAccess access, FileShare share);这个构造函数为例说一下
(string path、FileMode mode、FileAccess access、FileShare share,都为FileStream构造函数中的参数)

①string path

当前FileStream对象封装的文件的路径

②FileMode

指定操作系统打开文件的方式

方法说明使用
Append打开现有文件并查找到文件尾FileMode.Append
Create创建新文件,文件已存在则被改写FileMode.Create
CreateNew文件不存在时,创建新文件FileMode.CreateNew
Open打开现有文件FileMode.Open
OpenOrCreate如果文件存在,打开文件;不存在则新建文件FileMode.OpenOrCreate
Truncate打开现有文件,文件一旦打开,将被截断为零字节大小FileMode.Truncate
………
③FileAccess

定义文件的读取、写入/读写访问权限

方法说明使用
Read文件的读访问FileAccess.Read
Write文件的写访问FileAccess.Write
ReadWrite文件的读写访问权限FileAccess.ReadWrite
④FileShare

用于控制其它FileStream对象对同一文件可以具有的访问类型的常数。

方法说明使用
None谢绝共享当前文件FileShare.None
Read允许打开文件读取FileShare.Read
Write允许打开文件写入FileShare.Write
ReadWrite允许打开文件读取或写入FileShare.ReadWrite
Delete允许随后删除文件FileShare.Delete
Inheritable使文件句柄可有子进程继承FileShare.Inheritable
………

4、StreamReader类

文本数据的读取

方法说明
Close关闭StreamReader对象和基础流,释放资源
Peek返回下一个可用的字符,但不使用它
Read读取流的的下一个或下一组字符
ReadLine从当前流读取一行字符,并将数据作为字符串返回
ReadToEnd从流的当前位置到末尾读取流
……


5、StreamWrite类

文本数据的写入

方法说明
Close关闭当前的StreamWrite对象和流
Write写入流
WriteLine写入重载参数指定的某些数据,后跟行结束符
……



二、文件操作实例

对上述的各种类Directory、File、FileStream、StreamWriter进行实际运用

public class write_log
    {
        /// 
        /// 写日志
        /// 
        /// 写入日志文件的信息
        public static void write_log_to_f(string log_info)
        {
            //对写入txt文件的数据分行
            log_info = "rn" + log_info;

            //将日志文件的路径设为绝对路径【F:\My_Code\sqldemo_log】
            string folder = "F:\My_Code\sqldemo_log";

            //判断目录各文件夹【F:My_Codesqldemo_log】是否存在
            if (!Directory.Exists(folder)) 
            {
                Directory.CreateDirectory(folder);//目录不存在则创建相应的目录
            }

            //string file_name = folder + "/" + DateTime.Now.ToShortDateString() + ".txt";
            string file_name = folder + "/" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";

            //判断文件夹下的文件是否存在【F:My_Codesqldemo_log2020-07-29.txt】
            if (File.Exists(file_name))
            {
                FileStream fs = new FileStream(file_name, FileMode.Append, FileAccess.Write, FileShare.ReadWrite);
                StreamWriter sr = new StreamWriter(fs);
                sr.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "t" + log_info);

                sr.Close();
                fs.Close();
            }
            else
            {
                FileStream fs = new FileStream(file_name, FileMode.Create, FileAccess.Write, FileShare.ReadWrite);
                StreamWriter sr = new StreamWriter(fs);
                sr.WriteLine(DateTime.Now.ToString("HH:mm:ss") + "t" + log_info);

                sr.Close();
                fs.Close();
            }
        }

    }
    


三、测试

我还是用单元测试来吧

  • 测试代码
        public void write_log_to_fTest()
        {
            string log_info = "写入日志的测试 by 陈学姐";
            write_log.write_log_to_f(log_info);
        }
  • 运行结果

  • 相应路径下看一下文件中是否写入数据
    代码中的路径:【“F:My_Codesqldemo_log” + “/” + DateTime.Now.ToString(“yyyy-MM-dd”) + “.txt”】



四、结束

小问题:
原本在代码中获取短时间我用的是DateTime.Now.ToShortDateString(),但是所显示的短日期格式却变成了“2020/07/29”,不是我预期的“2020-07-29”。
百度一下,发现ToShortDateString()的日期格式获取是由所处区域及人为设置影响的,可以进入【控制面板——时钟和区域——区域——格式】中进行设置。

【.net】C#关于如何创建文件、读取文件数据、向文件写数据,记录,打板!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923166.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号