C#异步操作文件流

C#.net 异步读写文件 使用异步读写实现文件的Copy:using System;using System.IO;using System.Text;using System.Threading;using System.Runtime.InteropServices;using System.Runtime.Remoting.Messaging;public class AsyncReadWrite{ byte 阅读详情

在BahamutCMS中的页面生成依靠一个外部程序PGenerator.exe来读取mssql数据库中的发布命令,再生成页面。在这个io操作过程中,先是读取页面模版,将模版调用的文件(图片、js文件、css)先复制到目标的目录中,在通过模版和数据库中的数据生成页面。
可以看到生成页面的操作是比较简单的,一般html文件大小不会超过几百k,关键在复制包含文件的过程中,可能会涉及到很多文件,而且文件可能很大。在PGenerator中,现在使用的是非异步操作方式,因此会造成应用程序短时间内无法响应。
如果使用异步操作,他的一般步骤如下(读取部分):
使用public override IAsyncResult FileStream::BeginRead(
  
byte[] array,
  
int offset,
  
int numBytes,
  
AsyncCallback userCallback,
  
object stateObject
);

其中userCallBack为读取操作完成时的回调函数,stateObject是用来传递到回调函数中的一个对象,该对象包含了文件read时的一些信息。我的代码:
public class FileStateObject/////////定义回调函数中传递的对象
 {
  public byte[] content;///////读取的内容
  public FileStream fs;////////操作时的FileStream对象
  public int length;/////////////读取的内容长度
 }
/////////读取文件
private void OpenFileAnsy()
  {
   OpenFileDialog ofd=new OpenFileDialog ();
   if (ofd.ShowDialog()==DialogResult.OK)
   {
    string filename=ofd.FileName;
    if (File.Exists(filename))
    {
     FileStream fs=File.OpenRead(filename);
     Byte[] content=new byte [fs.Length];
     FileStateObject fso=new FileStateObject ();////////为传递给回调函数的对象
     fso.content=content;
     fso.fs=fs;
     fso.length=Convert.ToInt32 (fs.Length);
     AsyncCallback readFileCallback = new
      AsyncCallback(ReadInFileCallback);/////////定义回调的实例
     fs.BeginRead (fso.content,0,fso.length,
      readFileCallback,fso);
     this.txinfo.Text="start...";
     MessageBox.Show ("Read Start");
    }
   }
  }

/// <summary>
  /// 当异步完成时的回调操作
  /// </summary>
  /// <param name="asyncResult"></param>
  public static void ReadInFileCallback(IAsyncResult asyncResult)
  {
   FileStateObject fso=(FileStateObject)asyncResult.AsyncState;////从参数中取出传来的对象
   FileStream fs=fso.fs;
   int byteread=fs.EndRead (asyncResult);//////结束异步操作
   if (byteread==fso.length)
   {
    MessageBox.Show ("Read Complete");
   }
  }

这样,当执行到BeginRead()时,系统不在阻塞到文件读取之后,而是直接运行下面的代码。


转: http://blog.thmz.com/user1/9/archives/2005/7.htm
C# 文件 I/O 操作详解:从基础到高级应用 在软件开发中,文件操作(I/O)是一项基本且重要的功能。无论是读取配置文件、存储用户数据,还是处理日志文件,C# 都提供了丰富的 API 来高效地进行文件读写操作。本文将全面介绍 C# 中的文件 I/O 操作,涵盖基础文件操作、文本/二进制文件读写、流式处理、异步 I/O 以及最佳实践,帮助开发者掌握文件处理的技巧。 阅读详情

相关推荐

C#高级编程:IO和序列化

在某些情况下,默认的序列化机制可能无法满足需求,这时就需要进行自定义序列化。可以通过实现ISerializable接口或使用OnSerializing和OnDeserializing特性来控制序列化和反序列化过程。set;实现ISerializable接口后,需要实现GetObjectData方法来指定要序列化的字段和属性,并提供一个接受SerializationInfo和StreamingContext参数的构造函数用于反序列化。​。

hy_4377的博客 1072

转 如何有效的使用C#读取文件 及如何解决中文乱码问题

//方法1: StreamReader din = new StreamReader(@"C:\1.txt", System.Text.Encoding.GetEncoding("gb2312")); string html = ""; while (din.Peek() > -1) ...

weixin_30664051的博客 376

C#开发的OpenRA的读取文件的函数

而当下的游戏,都是每周进行热更新,并且数据量越来越大,就是因为需要更多的图片。在读取这些文件时,需要注意的只能读取,不要去更改它,因为这些图片不容修改。因为游戏跟电影是一样,就是不断地展示场景,以及人物的动作。其实游戏的大部分工作都不是在开发上,而是在美工方面。很久以前,我以为开发游戏的主要功能是在程序开发上,在OpenRA游戏里,读取文件是必备的功能。C#开发的OpenRA的读取文件的函数。它是打开一个文件,返回只读的流对象。这里的函数都是上一个文章里类函数。也有可能是一个压缩的ZIP文件。

大坡3D软件开发 881

C#读写文件

通常我们读取一个文件使用如下的步骤: 1、声明并使用File的OpenRead实例化一个文件流对象,就像下面这样 FileStream fs = File.OpenRead(filename); 或者 FileStream fs = FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read); 2、准备一个存放文件内容的字节数组,fs.Length将得到文件的实际大小,就像

luobailian的专栏 1万+

C#文件备份系统:从入门到实践

本文还有配套的精品资源,点击获取 简介:C#文件备份系统是一个旨在教授文件备份功能实现的项目,涵盖文件操作、异步操作、多线程、文件过滤、进度条、错误处理、压缩、路径处理、配置管理以及用户界面设计等多个知识点。本项目强调在Windows应用程序开发领域的实践应用,通过深入探讨这些关键概念,帮助开发者提升编程技能和软件开发能力。 1. 文件备份系统的构建 在当今数字...

weixin_36296444的博客 1636

ThinkPHP+Layui开发的ERP管理系统

ERP采购生产销售系统,一款基于ThinkPHP+Layui开发的ERP管理系统,帮助中小企业实现ERP管理规范化,此系统能为你解决五大方面的经营问题:1.采购管理 2.销售管理 3.仓库管理 4.资金管理 5.生产管理,适用于:服装鞋帽、化妆品、机械机电、家具装潢、建材行业、快销品、母婴用品、办公用品、汽配汽修、生鲜农贸、手机通讯、数码家电、医药用品、制造业、信息技术服务行业等。提供全部无加密服务端和前端源代码,独立部署,不受限制。

u011092458的博客 788

8.3 C# 文件流和数据流(抽象类 Stream、文件流 fileStream)

它支持同步和异步操作,并且可以指定不同的文件访问模式,如只读、只写、读写等。使用这些类时,通常需要确保读取和写入操作的顺序和数据类型一致,以避免数据损坏或读取错误。这些类提供了对字符流的高级处理,允许你以文本方式读取或写入数据,同时自动处理字符编码。我们向流中写入了一些数据,然后重置了流的位置,并读取了数据。类是一个抽象类,它提供了用于处理数据流的基类。命名空间的一部分,它提供了一种简便的方法来读取二进制文件中的基本数据类型。来处理文本文件的读写操作,这些类提供了简单而高效的方式来处理文本数据。

Argonaut_的博客 2731

HFSS - 双频微带天线设计与仿真

一、设计指标 中心频率:1.9GHz、2.45GHz 匹配情况:中心频率处S11S_{11}S11​参数小于-20dB 介质板厚度:1.6mm 介质板介电常数:3.8 馈电方式:50Ω\OmegaΩ同轴线馈电 二、双频微带天线 获得双频工作的一种最简单的方法是辐射贴片的长度对应-一个频率谐振,其宽度对应另一个频率谐振,然后从对角线的一角馈电,就能使同一个辐射贴片工作于两个频率上。其结构如下图所示。 从图中可以得知,x轴上的A点(x,0)为激发TM10_{10}10​模式的50Ω\OmegaΩ馈电点,由

MaxWei 1万+

深入理解C#中的文件系统I/O操作

文件系统I/O操作是任何编程语言中的重要组成部分,C#也不例外。无论是读写文件、操作目录,还是处理文件流,C#都提供了丰富且强大的类库来实现这些功能。本文将详细介绍C#中的文件系统I/O操作,并通过代码示例展示如何高效地处理文件和目录。

weixin_72139050的博客 984

Linux SMP系统多核启动机制详解

对称多处理(SMP)是现代操作系统支持多核并行计算的基础架构。其核心原理是通过引导处理器(BSP)初始化系统环境后,通过处理器间中断(IPI)机制唤醒应用处理器(AP)。在x86架构中,AP启动时处于实模式,需要特殊的trampoline代码完成保护模式切换和分页设置。这种设计既保证了系统初始化的正确性,又实现了多核并行处理的性能优势。理解SMP启动流程对优化系统启动速度和调试多核问题至关重要,特别是在云计算和嵌入式系统中,高效的SMP初始化能显著提升系统响应能力。本文以Linux内核为例,深入解析了从BS

weixin_35006125的博客 289

Chatbox使用指南

Chatbox使用指南

weixin_65289420的博客 2万+

029-C# 文件的输入与输出

接下来将深入探讨 C# 文件输入与输出的高级功能,包括文件权限管理、临时文件操作、流的高级用法、压缩与解压缩、跨平台文件路径处理以及常见问题的解决方法。通过合理设计和最佳实践,C# 文件 I/O 可以高效地满足各种开发需求,无论是简单的文件操作还是复杂的数据流处理。通过合理使用 C# 的文件输入与输出功能,可以轻松管理文件和目录,满足各种文本或二进制文件的操作需求。C# 提供了异步方法来提高文件操作的性能,尤其是在处理大文件或高并发场景时。命名空间实现,包括文件的创建、读取、写入、删除等操作。

小宝哥Code的专栏 2114

深度残差网络的无人机多目标识别

深度残差网络的无人机多目标识别 人工智能技术与咨询 来源:《图学学报》。作者翟进有等 摘要:传统目标识别算法中,经典的区域建议网络(RPN)在提取目标候选区域时计算量大,时间复杂度较高,因此提出一种级联区域建议网络(CRPN)的搜索模式对其进行改善。此外,深层次的卷积神经网络训练中易产生退化现象,而引入残差学习的深度残差网络(ResNet),能够有效抑制该现象。对多种不同深度以及不同参数的网络模型进行研究,将两层残差学习模块与三层残差学习模块结合使用,设计出一种占用内存更小、时间复杂度更低的新型多捷.

m0_62870606的博客 3106

textfilestream_C#里的文件流(FileStream)

C#里的文件流(FileStream)一、文件流(FileStream)FileStream 类是公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。命名空间:System.IO程序集:mscorlib(在 mscorlib.dll 中)在C#中的声明为[ComVisibleAttribute(true)]public class FileStream : Stream二、文件...

weixin_33773996的博客 509

STM32 ST-LINK Utility 无法烧录程序的解决方法

当你打开STM32 ST-LINK Utility,硬件连接好st-link V2,打开了要烧写的文件,点那个Program verify烧录时, 如果出错了: Programming error @ 0x08000000! 我的方法是: 点你想要烧录那个HEX文件的小格,复制 然后去到你前面的文件的格子里,点粘贴: 成功! ...

wocute的博客 9521

html2canvas - 解决截图后引入的字体样式丢失问题,第三方字体截图导出图片后字体失效,html2canvas截屏生成图片后艺术字体就丢失并且自动转成常规字体了,特殊字体显示不了无法截图怎么办

vue2,vue3,uniapp,html2canvas截图后引入的字体样式丢失,html2canvas艺术字截图不显示,使用外部字体无效,html2canvas无法识别网络字体文件怎么办,ttf文件,网页使用在线字体链接利用html2canvas无法截取,字体样式没有了,font-family第三方字体,@font-face引入本地字体文件后无法被html2canvas识别怎么办,html2canvas文字消失,vue页面正常显示艺术字体但截屏后没有,html2canvas截图存在特殊字体时截图不全,默认

✅ 精选推荐文章 1万+

10.5 流

简单理解流像是一页纸张,根据需要写入的内容这页纸可以很大,也可以很小,可以向纸张上面写入(Write)内容(通常是字节形式的数据),写入的位置(Position)随写入内容而增加相应数量;同时也可以从纸上已有内容的某个位置读取(Read)已经写入的内容,读取的位置(Position)也随读取内容而增加相应数量。已经有的内容是不能裁剪掉的,但是可以从已经写入内容的某个位置(Position)开始,用新的内容覆盖原有内容。

学习微软 .net 技术开发 892

学Simulink——基于AI融合与智能调度的场实例:联邦学习支持的多卫星协同通信建模

本文介绍了一种基于联邦学习的多卫星协同通信Simulink建模方法。系统采用"星-星协同+星-地协调"架构,每颗卫星本地训练LSTM链路预测模型,地面中心通过FedAvg算法聚合模型参数。建模过程包括卫星通信模型构建、联邦学习机制设计、协同决策系统开发等步骤,支持隐私保护、高效协同和智能决策。仿真结果表明,该方法在预测准确率(89%)、吞吐量(56.7Mbps)等方面优于独立训练模式,接近集中式训练性能。该方案为大规模卫星星座的智能协同提供了仿真验证平台,未来可拓展去中心化联邦学习、异构

xiaoheshang_123的博客 209

异步操作(二)

  当然笔者认为触及这方面知识就就必须对委托很了解,这方面编程会用到委托,同时还要清楚C#为委托提供的语法便利,笔者发现异步操作和委托真是“绝配”了。笔者个人认为异步编程也会是将来的趋势,因为异步的程序(不能说绝对,但是大多数)效率还是比较高的。我们同时也在享受异步操作带来的优势,WEB服务器环境就是一个异步环境,每一个请求都是独立的线程。很难想象只能同步处理一个请求的WEB服务器有什么用?  ...

weixin_34138521的博客 94

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

C#异步下载文件--基于http请求

1.废话不多说,直接上代码: 1 using System; 2 using System.IO; 3 using System.Net; 4 5 namespace AsyncProgram 6 { 7 class Program 8 { 9 static void Main(string[] args) 10...

diankaoli4837的博客 564

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

转载 张子阳 学习记录 c#网络编程 5

C#网络编程(接收文件) - Part.5 这篇文章将完成Part.4中剩余的部分,它们本来是一篇完整的文章,但是因为上一篇比较长,合并起来页数太多,浏览起来可能会比较不方便,我就将它拆为两篇了,本文便是它的后半部分。我们继续进行上一篇没有完成的步骤:客户端接收来自服务端的文件。 4.客户端接收文件 4.1服务端的实现 对于服务端,我们只需要实现上一章遗留的sendFile()方法就可...

weixin_30244681的博客 103

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

.net txt文本操作类_第二十二章 文件操作

第二十二章 文件操作22.1 概述文件是任何应用程序开发时必不可少的操作,.Net框架下提供的文件操作基本都位于http://System.IO命名空间下。22.2 File和FileInfo这两个类用来操作硬盘上的文件,File类主要通过静态方法实现,而FileInfo类则是通过实例方法实现的。FileInfo类的实例成员提供了与FIle类差不多的功能,大多数情况下,他们可以相互互换使用,但是由...

weixin_29272301的博客 196

【亲测免费】 CoreFTP:一个简单易用的.NET FTP库

CoreFTP:一个简单易用的.NET FTP库 CoreFTP 是一个开源的.NET FTP库,完全使用 C# 编写。该项目旨在提供一个没有外部依赖的轻量级FTP解决方案,适用于 .NET Core 以及完整的 .NET 框架。 项目基础介绍与主要编程语言 CoreFTP 是一个针对 netstandard 1.6 的简单 .NET FTP 库,这意味着它可以在 .NET Core 上运行,同时...

gitblog_00858的博客 568

c++ 写入文件_第二十二章 文件操作

22.1 概述文件是任何应用程序开发时必不可少的操作,.Net框架下提供的文件操作基本都位于System.IO命名空间下。22.2 File和FileInfo这两个类用来操作硬盘上的文件,File类主要通过静态方法实现,而FileInfo类则是通过实例方法实现的。FileInfo类的实例成员提供了与FIle类差不多的功能,大多数情况下,他们可以相互互换使用,但是由于FIle类提供的方法都是静态方法...

weixin_39600366的博客 346

C#串口操作

[code="java"]#region Using using System; using System.IO; using System.Threading; using System.Runtime.InteropServices; using System.ComponentModel; #endregion Using namespace LoMaN.IO { ...

huang714 430
上一篇: C#给MDI主窗口添加背景最简单的办法
下一篇: C#解决文件被占用资源,无法删除或修改办法
cg_program
博客等级 码龄19年 245粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值