using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO; //文件异步操作
namespace FileAsynchronousOperation
{
class Program
{
static void Main(string[] args)
{
//实例化MyFile类
MyFile myFile = new MyFile();
//定义参数
string filePath = "D:\\testasy.txt";
string msg = "helloworld";
//调用异步操作方法
myFile.AsynchronousOperation(filePath,msg);
}
}
/// <summary>
/// 文件
/// </summary>
class MyFile
{
/// <summary>
/// 文件异步操作
/// </summary>
/// <param name="filePath">文件路径</param>
/// <param name="msg">写入内容</param>
public void AsynchronousOperation(string filePath,string msg)
{
FileStream fileSteam = null; FileInfo fileinfo = new FileInfo(filePath);
//判断文件是否存在
if (!fileinfo.Exists)
{
fileSteam = fileinfo.Create();
Console.WriteLine("创建文件{0}", filePath);
fileSteam.Close();
}
fileSteam = new FileStream(filePath, FileMode.Open, FileAccess.Write, FileShare.None, , true);
Console.WriteLine("开启异步操作{0}", fileSteam.IsAsync);
byte[] buffer = Encoding.Default.GetBytes(msg);
//开始执行异步操作
IAsyncResult asynncResult = fileSteam.BeginWrite(buffer,, buffer.Length, new AsyncCallback(EndWriteCallBack), fileSteam);
Console.WriteLine("开始异步写入请稍候...");
Console.Read();
}
/// <summary>
/// 回调函数
/// </summary>
/// <param name="asyncResult">状态</param>
public void EndWriteCallBack(IAsyncResult asyncResult)
{
Console.WriteLine("异步写入开始...");
FileStream stream = asyncResult.AsyncState as FileStream;//转化为FileStream类型
if (stream!=null)
{
stream.EndWrite(asyncResult);
stream.Close();
}
Console.WriteLine("写入完成"); }
}
}
Filestreom 在对文件进行异步操作时,对大数据量读写操作使用 BeginRead 和 Begin 树 rite 方法的效果更好;
而对于数据量较少的读写操作,使川异步方式的速度可能会比同步方式要慢。
所以,你需要针对应用程序的实际情况决定是否要选择异步处理方式。

C# 文件异步操作的更多相关文章

  1. C#客户端的异步操作

    上篇博客[用Asp.net写自己的服务框架] 我讲述了如何实现自己的服务框架,但我想很多人应该用过WebService这类服务框架,相比起来,似乎还缺少什么东西, 是的,我也感觉到了.比如:我可以很容 ...

  2. 关于generator异步编程的理解以及如何动手写一个co模块

    generator出现之前,想要实现对异步队列中任务的流程控制,大概有这么一下几种方式: 回调函数 事件监听 发布/订阅 promise对象 第一种方式想必大家是最常见的,其代码组织方式如下: fun ...

  3. async + promise 解决回调地狱

    // 解决异步回调地狱的方案: async + promise async function writeFile() {   // 打开文件   const fd = await new Promis ...

  4. 看完我的笔记不懂也会懂----Node.js

    Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...

  5. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  6. android用异步操作AsyncTask编写文件查看器

    Activity程序 package com.example.fileasynctaskproject; import java.io.File; import java.util.ArrayList ...

  7. Javascript - 异步操作和读取文件

    node.js读取文件 node.js内置了异步读取文件的模块,可以很方便地读取文件的数据.先创建三个txt文档,在根目录下创建一个readFile.js 输入以下代码,然后在vscode的终端中输入 ...

  8. 【C#进阶系列】27 I/O限制的异步操作

    上一章讲到了用线程池,任务,并行类的函数,PLINQ等各种方式进行基于线程池的计算限制异步操作. 而本章讲的是如何异步执行I/O限制操作,允许将任务交给硬件设备来处理,期间完全不占用线程和CPU资源. ...

  9. C# 异步操作 async await

    在编程的过程中,我们会遇到很多需要异步操作的场景.比如要下载一个文件,如果使用同步的方式进行下载,那么UI操作就会被卡住,这时最好能够使用异步的方式进行下载.在C#中,很早就开始支持异步的操作了,只不 ...

随机推荐

  1. echarts如何显示在页面上

    echarts如何显示在页面上 1.引入echarts的相关.js文件 <script src="js/echarts.min.js"></script> ...

  2. 鸟哥的linux私房菜 - 第三章 主机规划与磁盘分区

    各硬件装置在linux中的文件名 在linux系统中,每个装置都被当成一个档案来对待. 常见的装置与其在linux中的档名: 磁盘分区 磁盘链接的方式与装置文件名的关系 个人计算机常见的磁盘接口有两种 ...

  3. html5--2.10综合实例2-移动端页面练习

    html5--2.10综合实例2-移动端页面练习 学习要点 通过一个简单的移动手机页面,复习学过的内容 手机网页的测试 手机布局的屏幕设定 手机网页的测试方法 直接在手机上测试,比较麻烦,效果好 电脑 ...

  4. 「洛谷 P1801」黑匣子

    好像很久没有更过博客了,因为博主这几周很忙.其实是在搞颓. 题意很难懂,所以就不重复了.其实是懒. 一眼看上去这是个 \(Splay\) 裸题,直接插入一个数,查询区间第 \(K\) 大,但是这样太不 ...

  5. centos7下面搭建lnmp环境

    参考大神博客: http://www.linuxzen.com/lnmphuan-jing-da-jian-wan-quan-shou-ce-si-lnmpda-jian-yuan-ma-an-zhu ...

  6. C#高性能Socket服务器SocketAsyncEventArgs的实现(IOCP)

    网址:http://blog.csdn.net/zhujunxxxxx/article/details/43573879 引言 我一直在探寻一个高性能的Socket客户端代码.以前,我使用Socket ...

  7. Codeforces 758A. Holiday Of Equality 贪心

    题目大意: 给定一个长为\(n\)序列,每次操作在一个数上+1,求最小的操作次数使所有的数大小相同. 题解: 对这种题无话可说 #include <cstdio> #include < ...

  8. Scala学习——泛型[T]的6种使用(初)

    package com.dtspark.scala.basics /** * 1,scala的类和方法.函数都可以是泛型. * * 2,关于对类型边界的限定分为上边界和下边界(对类进行限制) * 上边 ...

  9. CentOS下安装配置Samba服务器

    0 环境介绍 VMWARE12下安装的CENTOS7虚拟机.宿主机为WIN7. 1 离线安装 费了九牛二虎之力,下载各种依赖,还是有问题,转向在线安装. 2 在线安装 虚拟机采用默认的配置: 其次,网 ...

  10. JAVA + SELENIUM--环境搭建

    一.安装JDK    可在JAVA官网http://www.java.com/zh_CN/download/ 中下载最新的JDK,并按提示安装    环境变量配置:我的电脑右键-->属性--&g ...