c# 文件与流
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# 文件与流的更多相关文章
- C#文件与流(FileStream、StreamWriter 、StreamReader 、File、FileInfo、Directory、directoryInfo、Path、Encoding)
(FileStream.StreamWriter .StreamReader .File.FileInfo.Directory.DirectoryInfo.Path.Encoding) C#文 ...
- 【转载】C++的文件和流
http://www.iteedu.com/plang/ccpp/cppdxjch2b/111.php C++语言把每一个文件都看成一个有序的字节流(见图14.2),每一个文件或者以文件结束符(end ...
- Java - 文件(IO流)
Java - 文件 (IO) 流的分类: > 文件流:FileInputStream | FileOutputStream | FileReader | FileWriter ...
- Java IO 文件与流基础
Java IO 文件与流基础 @author ixenos 摘要:创建文件.文件过滤.流分类.流结构.常见流.文件流.字节数组流(缓冲区) 如何创建一个文件 #当我们调用File类的构造器时,仅仅是在 ...
- C++ 文件和流
到目前为止,我们已经使用了 iostream 标准库,它提供了 cin 和 cout 方法分别用于从标准输入读取流和向标准输出写入流. 本教程介绍如何从文件读取流和向文件写入流.这就需要用到 C++ ...
- netframework转core时文件响应流问题
做将framework webapi项目转成netcore平台上的webapi项目时,发现原来的返回文件响应流在netcore平台下失效.代码如下,返回pdf文件响应流,供前端显示 /// <s ...
- (C/C++学习笔记) 二十. 文件和流
二十. 文件和流 ● 文件的概念 文件(file) 一. C/C++语言将文件作为字节序列(sequence of characters)来对待,但从编码角度,或说从对字节信息的解释来看,文件分为:文 ...
- 进阶系列(4)—— C#文件与流
一. 驱动器 在Windows操作系统中,存储介质统称为驱动器,硬盘由于可以划分为多个区域,每一个区域称为一个驱动器..NET Framew ork提供DriveInfo类和 DriveType枚 ...
- [19/03/30-星期六] IO技术_四大抽象类_ 字节流( 字节输入流 InputStream 、字符输出流 OutputStream )_(含字节文件缓冲流)
一.概念及分类 InputStream(输入流)/OutputStream(输出流)是所有字节输入输出流的父类 [注]输入流和输出流的是按程序运行所在的内存的角度划分的 字节流操作的数据单元是8的字节 ...
随机推荐
- centos系统安装rar解压工具unar
centOS上不支持rar解压,需要额外安装软件,收费版是unrar,免费版是unar unar在centOS上安装需要源码编译,下面是安装方法: 1.安装依赖 yum install gnustep ...
- es中queryBuilders api
package com.elasticsearch; import org.elasticsearch.action.ActionListener; import org.elasticsearch. ...
- CentOS上安装配置Ruby on Rails
0.install sublime editor(optional) ref:http://www.tecmint.com/install-sublime-text-editor-in-linux/ ...
- linux shell的here document用法(cat << EOF)
什么是Here Document?Here Document 是在Linux Shell 中的一种特殊的重定向方式,它的基本的形式如下cmd << delimiter Here Docu ...
- Kafka获取订阅某topic的所有consumer group【客户端版】
之前写过如何用服务器端的API代码来获取订阅某topic的所有consumer group,参见这里.使用服务器端的API需要用到kafka.admin.AdminClient类,但是这个类在0.11 ...
- 从0移植uboot(三) _编译最小可用uboot
前两篇介绍了uboot-2013.01的配置原理以及大体的运行流程,本文将讨论如何对uboot源码进行配置,将一个可用的uboot烧录到SD卡中. 定制自己的core board 市面上能买到的开发板 ...
- kaggle竞赛-保险转化-homesite
时间格式的转化 查看数据类型 查看DataFrame的详细信息 填充缺失值 category 数据类型转化 模型参数设定 结论 该项目是针对kaggle中的homesite进行的算法预测,使用xgbo ...
- react 使用 react-loadable分包
文档 yarn add react-loadable 使用 import Loadable from "@/components/loadable"; const Home = L ...
- git 设置tracking information
There is no tracking information for the current branch.Please specify which branch you want to merg ...
- 求最短路的三种方法:dijkstra,spfa,floyd
dijkstra是一种单源最短路算法.在没有负权值的图上,vi..vj..vk是vi到vk最短路的话,一定要走vi到vj的最短路.所以每次取出到起点距离最小的点,从该点出发更新邻接的点的距离,如果更新 ...