1、创建和删除目录

  在c#中涉及到输入、输出(i/o)相关操作的API都被放在System.IO命名空间下,或者子命令System.IO.IsolatedStoorage中。对目录进行操作可以使用Directory类和DirectoryInfo类。Directory类,提供了一些便捷的方法可以帮助开发人员轻松的对目录进行操作。DirectoryInfo类的功能和Directory类相似,公开了更多的成员以获得目录信息。

  使用两个按钮实现,文件目录的创建和删除

//引入输入、输出命名空间。
using System.IO; namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
//声明两个私有字段
DirectoryInfo dirInfo = null;//操作目录的对象
string dirName = string.Empty;//用于存储目录名称 public Form1()
{
InitializeComponent(); }
//创建按钮Click
private void button1_Click(object sender, EventArgs e)
{
//判断输入是否为空
if(string .IsNullOrWhiteSpace(textBox1.Text))
{
//打印提示语句
MessageBox.Show("IN err");
return;
}
dirName = textBox1.Text.Trim();//从当前System.String 对象移除所有空白字符和尾部空白字符 保存在目录名中
dirInfo = new DirectoryInfo(dirName);//实例dirInfo
//判断目录是否存在
if(dirInfo.Exists)//如果目录存在,则为 true;否则为 false。
{
dirInfo.Delete();//如果存在删除目录
}
//创建目录
dirInfo.Create();
MessageBox.Show("目录" + dirName + "创建成功"); } private void Form1_Load(object sender, EventArgs e)
{ }
//删除按钮Click
private void button2_Click(object sender, EventArgs e)
{
if(dirInfo!=null && !string.IsNullOrWhiteSpace(dirName))
{
dirInfo.Delete();
dirInfo = null;
}
}
}
}

注意:如果希望在指定的目录下创建目录,可以指定绝对路径。

2、创建文件和删除文件

  与目录操作相似,对于文件操作,同样有两个类可以选择。File类和FileInfo类。

  

//引入文件命名空间
using System.IO;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
string fileName = string.Empty;//用于存放新文件的名字
private void Form1_Load(object sender, EventArgs e)
{ }
//Create Click Button function
private void Create_Click(object sender, EventArgs e)
{
//判断文件名是否为空
if(string.IsNullOrWhiteSpace(Name.Text))
{
MessageBox.Show("文件名为空");
return;
}
fileName = Name.Text;
//如果文件已存在,删除
if (File.Exists(fileName))//确定指定文件是否存在
{
File.Delete(fileName);
}
var fs = File.Create(fileName);//创建文件
//向文件写入3000字节
Random rand = new Random();
byte[] buf = new byte[];
rand.NextBytes(buf);//使用随机数填充指定字节数组元素
fs.Write(buf, , buf.Length);//将字节快写去文件流
MessageBox.Show("创建"+fileName+"成功");
fs.Dispose();//释放资源,Syst.IO.Stream使用的资源
} private void Delete_Click(object sender, EventArgs e)
{
if(File.Exists(fileName))
{
File.Delete(fileName);//删除文件
}
}
}
}

3、流

  流是数据传递的一个载体,他是一个以Stream类为公共基类的对象,封装了一系列成员用于对流进行读写操作。流内有一个  位置指针 用于指示当前读写的位置。按照使用的方式不同,流也可以分为文件流、内存流和网络流。

  文件流:用于对文件进行操作的流对象。

  内存流:仅仅存在内存中,当应用程序退出或计算机电源关闭,内存流中的数据就会丢失,一般可以用来临时存储数据。

  网络流:用于网络数据的传输,例如在Socket可以使用网络流来发送和接收数据。

流对象自身在封装是会公开相关以便开发人员对流进行操作。为了使流操作方便,System.IO命名空间提供了几个辅助类

  StreamReader 类和StreamWriter类:封装了对流中有关字符的操作。例如向流中写入一行字符,或者一次性读取所有字符

  BinaryReader类和BinaryWriter类:专用于读写二进制数据,例如读取一个整形数int

4、读写文件

  对文件进行读写需要用到文件流FillStrea,可以通过以下几种方式获取文件里流对象

读取:File类的Open或者OpenRead方法。   FileInfo类的Open或OpenRead方法

写入:File类的Create方法  File类的Open或者Openwrite方法        FileInfo类的Create方法  FileInfo类的Open或OpenWriter方法

  如果仅仅希望简单的进行读写操作,可以直接使用File类的 WriteAllBytes、WriteAllLines、WriteAllText、ReadAllText、ReadLines等方法

using System.IO;
namespace ConsoleApp1
{
class Program
{
const string FILE_NAME = "newFIle.txt";//定义文件名
static void Main(string[] args)
{
/*****写入数据 *****/
//创建FileStream流实例
//打开文件,如果文件不存在就创建文件。以写入方式打开文件,
using (FileStream fs = new FileStream(FILE_NAME, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read))
{
BinaryWriter bw = new BinaryWriter(fs);//初始化 System.IO.BinareWrite实例
bw.Write(false);//写入一个bool值
bw.Write((int));//写入一个int值
bw.Write("hello hjx");//写入字符串
bw.Close();//关闭对象
}
Console.WriteLine("file write is ok");
/*******读出数据******/
bool b;
int n;
string s;
using (FileStream fsin = File.OpenRead(FILE_NAME))//打开文件
{
BinaryReader br = new BinaryReader(fsin);//实例fsin
//读出的顺序必须与写入的顺序相同
b = br.ReadBoolean();// 从当前流中读取 Boolean 值,并使该流的当前位置提升 1 个字节。
n = br.ReadInt32();//从当前流中读取 4 字节有符号整数,并使流的当前位置提升 4 个字节
s = br.ReadString();//读出字符串从当前流中读取一个字符串。 字符串有长度前缀,一次 7 位地被编码为整数。
br.Close();//关闭对象
}
//显示结果
Console.WriteLine("{0}", b);
Console.WriteLine("{0}", n);
Console.WriteLine("{0}", s);
Console.ReadLine();
}
}
}

直接使用FileStream 类读写文件

using System.IO;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
Random rand = new Random();//实例random
byte[] buf = new byte[];
//产生10个随机字节
rand.NextBytes(buf);//使用随机数填充指定字节数组元素
Console.WriteLine("随机序列{0}",BitConverter.ToString(buf)); //将随机产生的字节写入文件
try
{
FileStream fs = File.Create("data.dt");
//将字节数组中所有的字节都写入文件
fs.Write(buf, , buf.Length);
fs.Close();//关闭文件流
Console.WriteLine("write data ok");
}
catch(IOException ex)
{
Console.WriteLine(ex.Message);//输出错误信息
}
//从文件中读出数据
Array.Clear(buf, , buf.Length);//清除buf中的内容
try
{
FileStream fs = File.OpenRead("data.dt");
//从文件流中读出所有字节
fs.Read(buf, , buf.Length);
fs.Close();//关闭文件流
}
catch(IOException ex)
{
Console.WriteLine(ex.Message);
}
//输出结果
Console.WriteLine("read data:{0}", BitConverter.ToString(buf));
Console.Read();
} }
}

5、内存流

  内存流按照类型可以分为托管内存流 ,以MemoryStream类为代表,和非托管内存流以UnmannedMemoryStream代表,在实际的开发中,使用最多的是托管内存流,而非托管内存流一般可以用于操作内存映射文件。

using System.IO;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
MemoryStream ms = new MemoryStream();//创建内存流
//创建文件流用于保存png图像
FileStream fs = new FileStream("1.png", FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read);
//生成位图
using (Bitmap bmp = new Bitmap(, ))
{
Graphics g = Graphics.FromImage(bmp);
Pen mypen = new Pen(Color.Blue, 5f);
Rectangle rect1 = new Rectangle(, , , );// 用指定的位置和大小初始化 System.Drawing.Rectangle 类的新实例。
Rectangle rect2 = new Rectangle(, , , );
//绘制矩形
g.DrawRectangles(mypen, new Rectangle[] { rect1, rect2 }); // 绘制一系列由 System.Drawing.Rectangle 结构指定的矩形。
mypen.Dispose();//释放钢笔对象
g.FillEllipse(Brushes.Red, new Rectangle(, , , )); // 填充 System.Drawing.Rectangle 结构指定的边框所定义的椭圆的内部。
g.Dispose();//释放画布对象
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Png);//将图像保存到内存流中
bmp.Save(fs, System.Drawing.Imaging.ImageFormat.Png);//将图像保存到文件流中
}
//从内存流中加载图像
this.pictureBox1.Image = Image.FromStream(ms);
ms.Dispose();//释放内存流
}
}
}

6、内存映射文件

  MemoryMappedFile类位于System.IO.MemoryMappedFile命名空间,公开了一系列的Api,用于创建和读写内存映射文件。内存映射文件存在于内存中,形式上类似磁盘上存储的文件,只是内存映射文件存放在内存中。当MemoryMappedFild类的实例被释放或者操作内存映射文件的最后一个进程退出后,文件就会被销毁。

  

c# 文件与流的更多相关文章

  1. C#文件与流(FileStream、StreamWriter 、StreamReader 、File、FileInfo、Directory、directoryInfo、Path、Encoding)

    (FileStream.StreamWriter .StreamReader .File.FileInfo.Directory.DirectoryInfo.Path.Encoding)     C#文 ...

  2. 【转载】C++的文件和流

    http://www.iteedu.com/plang/ccpp/cppdxjch2b/111.php C++语言把每一个文件都看成一个有序的字节流(见图14.2),每一个文件或者以文件结束符(end ...

  3. Java - 文件(IO流)

    Java - 文件 (IO)   流的分类:     > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter     ...

  4. Java IO 文件与流基础

    Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...

  5. C++ 文件和流

    到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流. 本教程介绍如何从文件读取流和向文件写入流.这就需要用到 C++ ...

  6. netframework转core时文件响应流问题

    做将framework webapi项目转成netcore平台上的webapi项目时,发现原来的返回文件响应流在netcore平台下失效.代码如下,返回pdf文件响应流,供前端显示 /// <s ...

  7. (C/C++学习笔记) 二十. 文件和流

    二十. 文件和流 ● 文件的概念 文件(file) 一. C/C++语言将文件作为字节序列(sequence of characters)来对待,但从编码角度,或说从对字节信息的解释来看,文件分为:文 ...

  8. 进阶系列(4)—— C#文件与流

    一. 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器..NET Framew   ork提供DriveInfo类和 DriveType枚 ...

  9. [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)

    一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...

随机推荐

  1. Apple Watch S3 解锁 MacBook Pro 2015版失败的解决办法

    我的MacBook Pro MF839由于只有128G的内存,所以就只能藏在我的抽屉底下,偶尔想体验一下xcode的时候再拿回来用下,想想都浪费 也不是不想换SSD,只是看了一下,价格太贵了,256G ...

  2. 使用MegaCli监控Linux硬盘

    1.首先查看机器是否使用的是MegaRAID卡 dmesg | grep RAID [ 6.932741] scsi host0: Avago SAS based MegaRAID driver 2. ...

  3. visual studio 2019密钥

    企业版:BF8Y8-GN2QH-T84XB-QVY3B-RC4DF 专业版:NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y

  4. PHP 合并有序数组

    <?php //两个有序数组合并 $arr1 = [1,5,7,44,66,89]; $arr2 = [4,5,6,88,99,105,111]; $arr3 = []; $l1 = count ...

  5. python数据分析及展示(三)

    一.Pandas库入门 1. Pandas库的介绍 http://pandas.pydata.org Pandas是Python第三方库,提供高性能易用数据类型和分析工具 import pandas ...

  6. Nginx、haproxy反向代理设置

    Nginx反向代理配置: #user nobody; worker_processes ; events { worker_connections ; } http { include mime.ty ...

  7. sql脚本练习

    多写sql语句,才能对数据库操作更加熟练. create database springbootdemo; use springbootdemo; create table user; // 这个脚本 ...

  8. CF3A Shortest path of the king

    The king is left alone on the chessboard. In spite of this loneliness, he doesn't lose heart, becaus ...

  9. linux 远程连接ssh提示IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY解决

    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HA ...

  10. route 配置默认网关

    影响Linux系统网络中网关配置信息的3种方式 1.生效文件cat /etc/sysconfig/network-scripts/ifcfg-eth0 GATEWAY=10.0.0.254 <- ...