ASP.NET文件操作
在开发Web程序时,不但有存储在数据库中和XML文件中的数据形式需要处理,而且还有很多诸如文本、Word文档和图片等格式的文件数据需要处理。尤其是在一些信息管理系统中,文档的处理流程贯穿了整个系统的运行过程。
文件的操作有很多种,如创建文件、复制文件、删除文件等,这些都是文件最基本的操作,.NET框架提供了一个静态类File来完成这些操作。
文件的I/O操作是一个比较复杂的过程。在.NET框架下,文件的I/O操作方式都是基于流(Stream)的,由于引进了流的概念,程序员可以通过对一系列的通用对象进行操作,而不必关心该I/O操作是和本机的文件有关还是与网络中的数据有关,这使得对于文件操作的编程变得非常简单,这大大减轻了程序员的工作。
.NET框架主要提供了一个System.IO命名空间,该命名空间基本包含了所有和I/O操作相关的类,因此在程序员开发文件操作的程序时需要引用该命名空间。
文件基本操作
在.NET框架里文件的基本操作基本上都是由静态类File来完成,File类提供了一系列的方法来完成这些操作。File类提供的方法如下:
1.AppendText:创建一个StreamWriter,它将UTF-8编码文本追加到现有文件。
2.Copy:将现有文件复制到新文件。
3.Create:在指定路径中创建文件。
4.CreateText:创建或打开一个文件用于写入UTF-8编码的文本。
5.Delete:删除指定的文件。如果指定的文件不存在,则不引发异常。
6.Exists:确定指定的文件是否存在。
7.Move:将指定的文件移到新位置,并提供指定新文件名的选项。
8.Open:打开指定路径上的FileStream。
9.OpenRead:打开现有文件以进行读取。
10.OpenText:打开现有UTF-8编码文本文件以进行读取。
11.OpenWrite:打开现有文件以进行写入。
创建文件。
新建项目,添加页面Default.aspx,在Default.aspx.cs中,在头文件中引用命名空间:using System.IO;;Page_Load事件中的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
StreamWriter streamWriter = File.CreateText(Server.MapPath("file1.txt"));
streamWriter.Write("新创建的文件。");
streamWriter.Close();
}
运行项目,在网站根目录下创建一个file1.txt文件,文件内容为:新创建的文件。
复制文件
Page_Load事件中的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (File.Exists(Server.MapPath("file1.txt")))
{
File.Copy(Server.MapPath("file1.txt"), Server.MapPath("file2.txt"));
}
}
删除文件
Page_Load事件中的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (File.Exists(Server.MapPath("file2.txt")))
{
File.Delete(Server.MapPath("file2.txt"));
}
}
文件的IO操作
在.NET框架中,文件的I/O操作是基于流的,而Stream类是所有流的抽象基类。Stream类及其派生类提供这些不同类型的输入和输出的一般视图,使程序员不必了解操作系统和基础设备的具体细节。
Stream类提供了对I/O操作的基本方法的定义,所有从该类派生出来的类,可以根据实际需要来实现相应的方法。
Stream类提供的方法如下:
1.BeginRead:开始异步读操作。
2.BeginWrite:开始异步写操作。
3.Close:关闭当前流并释放与之相关联的所有资源。
4.EndRead:等待挂起的异步读取完成。
5.EndWriter:结束异步写操作。
6.Flush:当在派生类中重写时,将清除该流的所有缓冲区,并使得所有缓冲区数据被写入到基础设备。
7.Read:当在派生类中重写时,从当前流读取字节序列,或者如果已到达流的末尾,则返回-1。
8.Seek:当在派生类中重写时,设置当前流中的位置。
9.SetLength:当在派生类中重写时,设置当前流的长度。
10.Writer:当在派生类中重写时,向当前流中写入字节序列,并将此流中的当前位置提升写入的字结数。
11.WriteByte:将一个字节写入流内的当前位置,并将流内的位置向前推进一个字节。
在.NET里面,由Stream派生出5种主要的流:
1.FileStream:支持对文件的顺序和随机读写操作。
2.MemoryStream:支持对内存缓冲区的顺序和随机读写操作。
3.NETworkStream:支持对Internet网络资源的顺序和随机读写操作,存在于System.Net.Sockets命名空间。
4.CryptoStream:支持数据的编码和解码,存在于 System.Security.Cryptography 名称空间。
5.BufferedStream:支持缓冲式的读写。
程序员可以根据自己的需要选择相应的流来实现文件的I/O操作。
创建文件。
新建项目,添加页面Default.aspx,在Default.aspx.cs中,在头文件中引用命名空间:using System.IO;;Page_Load事件中的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
string string1 = "使用流创建的文档。";
FileStream fileStream = new FileStream(Server.MapPath("file1.txt"), FileMode.OpenOrCreate);
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
fileStream.Write(encoding.GetBytes(string1), , encoding.GetByteCount(string1));
fileStream.Close();
}
读取文件
Page_Load事件中的代码如下:
protected void Page_Load(object sender, EventArgs e)
{
FileStream fileStream = new FileStream(Server.MapPath("file1.txt"), FileMode.OpenOrCreate);
System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
if (fileStream.Length != )
{
Byte[] byte1 = new byte[fileStream.Length];
fileStream.Read(byte1, , Convert.ToInt32(fileStream.Length.ToString()));
fileStream.Close();
Response.Write(encoding.GetString(byte1));
}
}
文件上传
ASP.NET提供了一个文件上传控件(FileUpload控件),该控件可以让用户更方便地浏览和选择用户上传的文件。该控件包含一个浏览按钮和用于输入文件名的文本框。只要用户在文本框中输入了完全限定的文件名,无论是直接输入还是通过“浏览”按钮选择,都可以调用该控件的SaveAs方法把文件保存到服务器上。
FileUpload控件提供了如下表所示的属性:
1.FileBytes:从使用FileUpload控件指定的文件中返回一个字节数组。
2.FileContent:返回一个指向上传文件的流对象。
3.FileName:返回要上传文件的名称,不包含路径信息。
4.HasFile:指明该控件是否包含文件,返回true表明该控件有文件要上传。
5.PostedFile:返回已经上传文件的引用,类型为HttpPostedFile.
HttpPostedFile类的属性如下:
1.ContentLength:返回上传文件的按字节表示的文件大小。
2.ContentType:返回上传文件的MIME内容类型。
3.FileName:返回上传文件在客户端的完全限定名。
4.InputStream:返回一个指向上传文件的流对象。
FileUpload控件提供了一个方法SaveAs,该方法用来把上传的文件保存到服务器上的指定路径。
用户使用FileUpload控件选择要上传的文件并提交页面后,该文件作为请求的一部分上传。文件将被完整地缓存在服务器内存中,文件完成上传后,就要在服务器代码中处理上传的文件,可以按照以下三种方式来处理内存中的文件:
1.作为在FileUpload控件的FileBytes属性中公开的字节数组。
2.作为在FileConten属性中公开的流。
3.作为PostedFile属性中类型为HttpPostedFile的对象。
在代码运行时,可以检查文件的特征,如文件的名称、大小和MIME类型,然后保存该文件。在保存文件之前检查文件的特征,可以把存在危害的文件忽略掉,以保证服务器的安全。
文件上传的处理步骤如下:
1.向页面添加FileUpload控件。
2.在事件处理程序中,执行操作。
3.检测FileUpload控件的HasFile属性。
4.检查该文件的文件名或MIME类型,以确保用户上传了服务器能接收的文件。
5.保存文件。
文件上传
新建项目,添加页面Default.aspx,在页面中添加如下代码:
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="上传" OnClick="Button1_Click" />
<br />
<asp:Label ID="Label1" runat="server" />
</div>
Default.aspx.cs中的代码如下:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls; namespace WebApplication2
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
} protected void Button1_Click(object sender, EventArgs e)
{
Boolean isOk = false;
string filePath = Server.MapPath("~/UploadedFiles/Images/");
if (FileUpload1.HasFile)
{
string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
string[] allowedExtensions = { ".gif", ".png", ".jpeg", ".jpg", ".ico" };
for (int i = ; i < allowedExtensions.Length; i++)
{
if (fileExtension.ToString () == allowedExtensions[i].ToString())
{
isOk = true;
}
}
}
if (isOk)
{
try
{
FileUpload1.PostedFile.SaveAs(filePath + FileUpload1.FileName);
Label1.Text="文件上传成功。";
}
catch (Exception ex)
{
Label1.Text="文件上传失败。";
}
}
else
{
Label1.Text="不支持的文件类型。";
}
}
}
}
ASP.NET文件操作的更多相关文章
- asp.net文件操作类
/** 文件操作类 **/ #region 引用命名空间 using System; using System.Collections.Generic; using System.Text; usin ...
- ASP.NET 文件操作类
1.读取文件 2.写入文件 using System; using System.Collections.Generic; using System.IO; using System.Linq; us ...
- asp.net 文件操作小例子(创建文件夹,读,写,删)
静态生成要在虚拟目录下创建文件夹 来保存生成的页面 那么就要对文件进行操作 一.创建文件夹 using System.IO; string name = "aa"; strin ...
- IIS身份验证和文件操作权限(三、ASP.NET模拟)
一.配置ASP.NET模拟 注意:在配置[ASP.NET模拟]是还要配置[匿名身份验证]不知道为什么,有知道可以留言,互相学习 二.浏览站点 -- 操作文件 ①无操作权限 点击写入 ②有操作权限(特定 ...
- ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)
做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path ...
- Cookie操作、ASP.Net文件上传HttpPostedFile
概述 Cookie用来保存客户浏览器请求服务器页面的请求信息. 我们可以存放非敏感的用户信息,保存时间可以根据需要设置.如果没有设置Cookie失效日期,它的生命周期保存到关闭浏览器为止,Cookie ...
- Web API与文件操作
前段时间,一直有练习ASP.NET MVC与Web API交互,接下来,Insus.NET再做一些相关的练习,Web API与文件操作,如POST文件至Web API,更新或是删除等. 不管怎样,先在 ...
- 使用ASP.NET MVC操作过滤器记录日志(转)
使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_Filte ...
- PHP文件操作系统----主要的文件操作函数
一.文件操作系统概述 1.概述: php中的文件操作系统主要是对文件和目录的操作.文件在windows系统下分为3种不同:文件.目录.未知,在linux/unix系统下分为7种不同:block.cha ...
随机推荐
- Ubuntu 16.04安装GTX960闭源驱动
GTX960的闭源要Nvidia 346版才行,闭源驱动能很大提升显卡的性能,例如双显示输出等,缺点是不开源. 有以下方式来安装: 1.命令行: sudo add-apt-repository -y ...
- zabbix学习系列之QQ消息报警
安装依赖包 环境 Zabbix: 3.2 OS:Centos 安装依赖包 yum install lrzsz chrony gcc gcc-c++ git openssl-devel perl-Ext ...
- Android内存泄露之开篇
先来想这三个问题 内存泄露是怎么回事 内存会泄露的原因 避免内存泄露 1.内存泄露怎么回事 一个程序中,已经不须要使用某个对象,可是由于仍然有引用指向它垃圾回收器就无法回收它,当然该对象占用的内存就无 ...
- Linux系统调用过程分析
參考: <Linux内核设计与实现> 0 摘要 linux的系统调用过程: 层次例如以下: 用户程序------>C库(即API):INT 0x80 ----->system_ ...
- 省市联动选择的一个demo,利用vue+webpack+amaze-vue实现省市区联动选择组件
https://github.com/sunshineJi/vue-city-picker
- java 翻页工具类
Pagination类 package com.paic.bics.core.mybatis.page; import java.util.List; @SuppressWarnings(" ...
- Minimizing Maximizer
题意: 最少需要多少个区间能完全覆盖整个区间[1,n] 分析: dp[i]表示覆盖[1,i]最少需要的区间数,对于区间[a,b],dp[b]=min(dp[a...b-1])+1;用线段树来维护区间最 ...
- 安装完Anaconda python 3.7,想使用python3.6方法
cmd使用命令: conda create -n py36 python=3.6 anaconda 安装好后,会有提示: To activate this environment, use:# > ...
- poj1286 Necklace of Beads—— Polya定理
题目:http://poj.org/problem?id=1286 真·Polya定理模板题: 写完以后感觉理解更深刻了呢. 代码如下: #include<iostream> #inclu ...
- 错误: 实例 "ruiy" 执行所请求操作失败,实例处于错误状态。: 请稍后再试 [错误: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)].
错误: 实例 "ruiy" 执行所请求操作失败,实例处于错误状态.: 请稍后再试 [错误: 'ascii' codec can't decode byte 0xe6 in posi ...