Ⅰ 用C#怎么实现文件下载功能
using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using System.IO;public partial class _Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } //TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite 下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。 代码如下: */ Response.ContentType = "application/x-zip-compressed"; Response.AddHeader("Content-Disposition", "attachment;filename=z.zip"); string filename = Server.MapPath("DownLoad/z.zip"); Response.TransmitFile(filename); } //WriteFile实现下载 protected void Button2_Click(object sender, EventArgs e) { /* using System.IO; */ string fileName ="asd.txt";//客户端保存的文件名 string filePath=Server.MapPath("DownLoad/aaa.txt");//路径 FileInfo fileInfo = new FileInfo(filePath); Response.Clear(); Response.ClearContent(); Response.ClearHeaders(); Response.AddHeader("Content-Disposition", "attachment;filename=" + fileName); Response.AddHeader("Content-Length", fileInfo.Length.ToString()); Response.AddHeader("Content-Transfer-Encoding", "binary"); Response.ContentType = "application/octet-stream"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.WriteFile(fileInfo.FullName); Response.Flush(); Response.End(); } //WriteFile分块下载 protected void Button3_Click(object sender, EventArgs e) { string fileName = "aaa.txt";//客户端保存的文件名 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath); if (fileInfo.Exists == true) { const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力 byte[] buffer = new byte[ChunkSize]; Response.Clear(); System.IO.FileStream iStream = System.IO.File.OpenRead(filePath); long dataLengthToRead = iStream.Length;//获取下载的文件总大小 Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName)); while (dataLengthToRead > 0 && Response.IsClientConnected) { int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小 Response.OutputStream.Write(buffer, 0, lengthRead); Response.Flush(); dataLengthToRead = dataLengthToRead – lengthRead; } Response.Close(); } } //流方式下载 protected void Button4_Click(object sender, EventArgs e) { string fileName = "aaa.txt";//客户端保存的文件名 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 //以字符流的形式下载文件 FileStream fs = new FileStream(filePath, FileMode.Open); byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length); fs.Close(); Response.ContentType = "application/octet-stream"; //通知浏览器下载文件而不是打开 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); }}这里提供4种常用下载方式 以供参考
Ⅱ win7下ASP.NET做文件下载,FileStream对文件夹里的文件无访问权限,如何设置
1.把ASPNET添到为管理员组里面去2.对需要访问的文件夹添加ASPNET用户
Ⅲ C# WebClient下载文件大小为0,没报错,求解!
new WebClient().DownloadFile(url, filename);不能下载可能是网站那边的原因
Ⅳ C#实现下载功能
//TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { // 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite //下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题 Response.ContentType = "application/x-zip-compressed"; Response.AddHeader("Content-Disposition", "attachment;filename=z.zip"); string filename = Server.MapPath("DownLoad/z.zip"); Response.TransmitFile(filename); } //WriteFile实现下载 protected void Button2_Click(object sender, EventArgs e) { //using System.IO; string fileName = "asd.txt";//客户端保存的文件名 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 FileInfo fileinfo = new FileInfo(filePath); Response.Clear(); Response.ClearContent(); Response.AddHeader("Content-Length", "attachment;filename=" + fileName); Response.AddHeader("Content-Transfer-Encoding", "binary"); Response.ContentType = "application/octet-stream"; Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312"); Response.WriteFile(fileinfo.FullName); Response.Flush(); Response.End(); } //WriteFile分块下载 protected void Button3_Click(object sender, EventArgs e) { string fileName = "aaa.txt";//客户端保存的文件名 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 System.IO.FileInfo fileinfo = new System.IO.FileInfo(filePath); if (fileinfo.Exists == true) { const long ChunkSize = 102400;//100k每次读取文件,只读取100k,这样可以缓解服务器的压力 byte[] buffer = new byte[ChunkSize]; Response.Clear(); System.IO.FileStream iStream = System.IO.File.OpenRead(filePath); long dataLengthToRead = iStream.Length;//获取下载的文件总大小 Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName)); while (dataLengthToRead > 0 && Response.IsClientConnected) { int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小 Response.OutputStream.Write(buffer, 0, lengthRead); Response.Flush(); dataLengthToRead = dataLengthToRead – lengthRead; } Response.Close(); } } //流方式下载 protected void Button4_Click(object sender, EventArgs e) { string fileName = "aaa.txt";//客户端保存的文件名 string filePath = Server.MapPath("DownLoad/aaa.txt");//路径 //以字符流的形式下载文件 FileStream fs = new FileStream(filePath, FileMode.Open); byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length); fs.Close(); Response.ContentType = "application/octet-stream"; //通知浏览器下载文件而不是打开 Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); } }
Ⅳ 关于asp.net 的几个名词解释,求助。。
1.Request对象作用是与客户端交互,收集客户端的Form、Cookies、超链接,或者收集服务器端的环境变量。request对象是从客户端向服务器发出请求,包括用户提交的信息以及客户端的一些信息。客户端可通过HTML表单或在网页地址后面提供参数的方法提交数据,然后通过request对象的相关方法来获取这些数据。request的各种方法主要用来处理客户端浏览器提交的请求中的各项参数和选项。Request对象的语法如下:Request[.collectionlpropertylmethod](variable)collection集合clientcertificate 得到在HTTP请求中传递在客户端认证域的值cookies 使用此集合,可得到cookies值form 得到form对象中元素的值querystring 得到变量的值servervariables 得到预置的环境变量的值property属性totalbytes (只读)指定从客户端传递总字节数buffer 表明页面输出是否有缓冲cachecontrol 决定代理服务器是否能够对asp的输出进行快取property属性charset 字符集contenttype 指定response的HTTP内容类型expires 定义一个浏览器缓存中的页面在多长时间后过期expiresabsolute 定义一个浏览器缓存中的页面什么日期时间后过期isclientconnected 用户是否连接到服务器pics 设置pics-label response标题的值,标示pics内容等级status 由服务器返回的状态行说明:1、其中collection表示集合,它和数组很类似,是由若干元素组成的集合。不过数组一般只能用索引(下标)来引用每一个元素,而集合不仅可以用索引来引用每一个元素的值,还可以用元素的名称来引用,如Request.Form("txtA")。事实上,后者是常用的方法。2、variable又称参数,它就是要获取的元素的名称,可以是字符串常量或字符串变量。例如,对表单信息来说,variable就是每一个表单元素的名称。3、“【”和“】”之间的参数可以省略,如Request("txtA")。此时因为没有指定集合,所以ASP将会依次在QueryString、Form、Cookies、ServerVariables、ClientCertificate这5种集合中检查是否有信息传入。如果有信息传入,则会返回获取的信息。4、请注意上面的第二个例子,其中前面的strB是定义的一个变量名称,而后面的strB则是集合中一个元素的名称,两者不是一回事。method方法binaryread 得到从客户端传给服务器端的数据1.Request对象是ASP中常用的对象,用于获取客户端的信息,可以使用Request对象访问任何基于HTTP请求传递的所有信息。通过Request对象能够获得客户端发送给服务器的信息,不能将服务器端的数据发送给客户端的浏览器。Request对象的属性TotalBytes的功能是取得客户端响应数据字节大小。Request对象的方法BinaryRead的功能是以二进制方式读取客户端post的数据。 request对象有五个集合,下面予以介绍:QueryString:用以获取客户端附在url地址后的查询字符串中的信息。 例如:stra=Request.QueryString ["strUserld"]Form:用以获取客户端在FORM表单中所输入的信息。(表单的method属性值需要为POST) 例如:stra=Request.Form["strUserld"]Cookies:用以获取客户端的Cookie信息。 例如:stra=Request.Cookies["strUserld"]ServerVariables:用以获取客户端发出的HTTP请求信息中的头信息及服务器端环境变量信息。 例如:stra=Request.ServerVariables["REMOTE_ADDR"],返回客户端IP地址ClientCertificate:用以获取客户端的身份验证信息 例如:stra=Request.ClientCertificate["VALIDFORM"],对于要求安全验证的网站,返回有效起始日期。2session对象用于存储特定的用户会话所需的信息 。 Session对象的引入是为了弥补HTTP协议的不足,HTTP协议是一种无状态的协议。 Session中文是“会话”的意思,在ASP中代表了服务器与客户端之间的“会话”。Session的作用时间从用户到达某个特定的Web页开始,到该用户离开Web站点,或在程序中利用代码终止某个Session结束。引用Session 则可以让一个用户访问多个页面之间的切换也会保留该用户的信息。 系统为每个访问者都设立一个独立的Session对象,用以存储Session变量,并且各个访问者的Session对象互不干扰。 Session与Cookie是紧密相关的。 Session的使用要求用户浏览器必须支持Cookie,如果浏览器不支持使用Cookie,或者设置为禁用Cookie,那么将不能使用Session。 Session信息对客户来说,不同的用户用不同的Session信息来记录。当用户启用Session时,ASP自动产生一个SessionID.在新会话开始时,服务器将SessionID当做cookie存储在用户的浏览器中。session语法:session.集合∣属性∣方法举例:<html><head><title>学好session加油</title></head><body><%session("greeting")="ASP“Response.write(session("greeting"))%></body></html>Session对象的集合、属性、方法、事件名称 描述 Contents集合 包含所有通过脚本命令添加到应用程序中的数据项 SessionID属性 用来标识每一个Session对象 TimeOut属性 用来设置Session会话的超时时间(以分钟表示) Abandon方法 强行删除当前会话的Session对象,释放系统资源 Session_OnStart事件 建立Session对象时所激发的事件 Session_OnEnd事件 结束Session对象时所激发的事件 StaticObjects集合 包含所有通过<OBJECT>标记添加到应用程序中的对象 3CompareValidator 控件用于将由用户输入到输入控件的值与输入到其他输入控件的值或常数值进行比较。注释:如果输入控件为空,则不会调用任何验证函数,并且验证将成功。使用 RequiredFieldValidator 控件使字段成为必选字段。属性属性 描述 BackColor CompareValidator 控件的背景颜色。 ControlToCompare 要与所验证的输入控件进行比较的输入控件。 ControlToValidate 要验证的输入控件的 ID。 Display 验证控件中错误信息的显示行为。合法值是: None 验证消息从不内联显示。Static 在页面布局中分配用于显示验证消息的空间。Dynamic 如果验证失败,将用于显示验证消息的空间动态添加到页面。 EnableClientScript 布尔值,规定是否启用客户端验证。 Enabled 布尔值,规定是否启用验证控件。 ErrorMessage 当验证失败时在 ValidationSummary 控件中显示的文本。注释:如果未设置 Text 属性,此文本将显示在验证控件中。 ForeColor 控件的前景颜色。 id 控件的唯一 ID。 IsValid 布尔值,指示由 ControlToValidate 指定的输入控件是否通过验证。 Operator 要执行的比较操作的类型。运算符是:EqualGreaterThanGreaterThanEqualLessThanLessThanEqualNotEqualDataTypeCheck runat 规定控件是服务器控件。必须设置为 "server"。 Text 当验证失败时显示的消息。 Type 规定要对比的值的数据类型。类型有:CurrencyDateDoubleIntegerString ValueToCompare 一个常数值,该值要与由用户输入到所验证的输入控件中的值进行比较。 实例CompareValidator在此例中,我们在 .aspx 文件中声明了两个 TextBox 控件,一个 Button 控件,以及一个 CompareValidator 控件。如果验证失败,将在 CompareValidator 控件中使用黄色背景红色文本显示 "Validation Failed!"。CompareValidator 2在此例中,我们在 .aspx 文件中声明了两个 TextBox,一个 ListBox 控件,一个 Button 控件,以及一个 CompareValidator 控件。check_operator() 函数把 ListBox 控件中选取的运算符设置为 CompareValidator 控件的运算符,然后对 CompareValidator 控件进行验证。如果验证失败,将在 CompareValidator 控件中使用黄色背景和红色文本显示 "Validation Failed!"。4.FileUpload控件 FileUpload 控件显示一个文本框控件和一个浏览按钮,使用户可以选择客户端上的文件并将它上载到 Web 服务器。用户通过在控件的文本框中输入本地计算机上文件的完整路径(例如,C:\MyFiles\TestFile.txt)来指定要上载的文件。用户也可以通过单击“浏览”按钮,然后在“选择文件”对话框中定位文件来选择文件。 用户选择要上载的文件后,FileUpload 控件不会自动将该文件保存到服务器。您必须显式提供一个控件或机制,使用户能提交指定的文件。例如,可以提供一个按钮,用户单击它即可上载文件。为保存指定文件所写的代码应调用 SaveAs 方法,该方法将文件内容保存到服务器上的指定路径。通常,在引发回发到服务器的事件的事件处理方法中调用 SaveAs 方法。 在文件上传的过程中,文件数据作为页面请求的一部分,上传并缓存到服务器的内存中,然后再写入服务器的物理硬盘中。 有三个方面需要注意: 1.确认是否包含文件 在调用 SaveAs 方法将文件保存到服务器之前,使用 HasFile 属性来验证 FileUpload 控件确实包含文件。若 HasFile 返回 true,则调用 SaveAs 方法。如果它返回 false,则向用户显示消息,指示控件不包含文件。不要通过检查PostedFile 属性来确定要上载的文件是否存在,因为默认情况下该属性包含 0 字节。因此,即使 FileUpload 控件为空,PostedFile 属性仍返回一个非空值。 2.文件上传大小限制 默认情况下,上传文件大小限制为 4096 KB (4 MB)。可以通过设置 httpRuntime 元素的 maxRequestLength 属性来允许上载更大的文件。若要增加整个应用程序所允许的最大文件大小,请设置 Web.config 文件中的 maxRequestLength 属性。若要增加指定页所允许的最大文件大小,请设置 Web.config 中 location 元素内的 maxRequestLength 属性。 上载较大文件时,用户也可能接收到以下错误信息: aspnet_wp.exe (PID: 1520) was recycled because memory consumption exceeded 460 MB (60 percent of available RAM). 以上信息说明,上传文件的大小不能超过服务器内存大小的60%。这里的60%是Web。config文件的默认配置,是<processModel>配置节中的 memoryLimit 属性默认值。虽然可以修改,但是如果上传文件越大,成功几率越小,不建议使用。 3.上传文件夹的写入权限 应用程序可以通过两种方式获得写访问权限。您可以将要保存上载文件的目录的写访问权限显式授予运行应用程序所使用的帐户。您也可以提高为 ASP.NET 应用程序授予的信任级别。若要使应用程序获得执行目录的写访问权限,必须将 AspNetHostingPermission 对象授予应用程序并将其信任级别设置为 AspNetHostingPermissionLevel.Medium 值。提高信任级别可提高应用程序对服务器资源的访问权限。请注意,该方法并不安全,因为如果怀有恶意的用户控制了应用程序,他(她)也能以更高的信任级别运行应用程序。最好的做法就是在仅具有运行该应用程序所需的最低特权的用户上下文中运行 ASP.NET 应用程序。 FileUpload控件的常用属性:属性 数据类型 说明 FileBytes byte[] 获取上传文件的字节数组 FileContent Stream 获取指定上传文件的Stream对象 FileName String 获取上传文件在客户端的文件名称 HasFile Bool 获取一个布尔值,用于表示FileUpload控件是否已经包含一个文件 PostedFile HttpPostedFile 获取一个与上传文件相关的HttpPostedFile对象,使用该对象可以获取上传文件的相关属性可以通过3种方法访问上传文件:1.通过FileBytes属性。该属性将上传文件数据置于字节数组中,遍历该数组,则能够以字节方式了解上传文件的内容。2.通过FileContent属性。调用该属性可以获得一个指向上传文件的Stream对象。可以使用该属性读取上传文件数据,并使用FileBytes属性显示文件内容。3.通过PostedFile属性。调用该属性可以获得一个与上传文件相关的HttpPostedFile对象,使用该对象可以获得与上传文件相关的信息。例如,调用HttpPostedFile对象的ContentLength,可以获得上传文件大小;调用HttpPostedFile对象的ContentType属性,可以获得上传文件的类型;调用HttpPostedFile对象的FileName属性,可以获得上传文件在客户端的完整路径(调用FileUpload控件的FileName属性,仅能获得文件名)。5.DataAdapter表示一组 SQL 命令和一个数据库连接,它们用于填充 DataSet和更新数据源。 命名空间:System.Data.Common程序集:System.Data(在 system.data.dll 中)语法 public class DataAdapter : Component, IDataAdapterDataAdapter 用作 DataSet 和数据源之间的桥接器以便检索和保存数据。DataAdapter 通过映射Fill(这更改了 DataSet 中的数据以便与数据源中的数据相匹配)和Update(这更改了数据源中的数据以便与 DataSet 中的数据相匹配)来提供这一桥接器。如果所连接的是 SQL Server 数据库,则可以通过将SqlDataAdapter与关联的SqlCommand和SqlConnection对象一起使用,从而提高总体性能。对于支持 OLE DB 的数据源,请使用 DataAdapter 及其关联的OleDbCommand和 OleDbConnection 对象。对于支持 ODBC 的数据源,请使用 DataAdapter 及其关联的OdbcCommand和OdbcConnection对象。对于 Oracle 数据库,请使用 DataAdapter 及其关联的OracleCommand和OracleConnection对象。当创建 DataAdapter 的实例时,读/写属性将被设置为初始值。有关这些值的列表,请参见 DataAdapter 构造函数这些都出自网络。其实我也不懂。能帮一点帮一点吧。
Ⅵ c#从服务器读文件的问题
C#从服务器上面读取文件,然后下载到本地可以用WriteFile()或者TransmitFile()方法实现,代码如下:
//1、TransmitFile实现下载protectedvoidButton1_Click(objectsender,EventArgse){/*微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。代码如下:*/Response.ContentType="application/x-zip-compressed";Response.AddHeader("Content-Disposition","attachment;filename=z.zip");stringfilename=Server.MapPath("DownLoad/z.zip");Response.TransmitFile(filename);}//2、WriteFile实现下载protectedvoidButton2_Click(objectsender,EventArgse){/*usingSystem.IO;*/stringfileName="asd.txt";//客户端保存的文件名stringfilePath=Server.MapPath("DownLoad/aaa.txt");//路径FileInfofileInfo=newFileInfo(filePath);Response.Clear();Response.ClearContent();Response.ClearHeaders();Response.AddHeader("Content-Disposition","attachment;filename="+fileName);Response.AddHeader("Content-Length",fileInfo.Length.ToString());Response.AddHeader("Content-Transfer-Encoding","binary");Response.ContentType="application/octet-stream";Response.ContentEncoding=System.Text.Encoding.GetEncoding("gb2312");Response.WriteFile(fileInfo.FullName);Response.Flush();Response.End();}
Ⅶ 一个关于asp.net(c#)下载文件的问题
如果是text格式的话,一般IE默认是直接把文件打开
Ⅷ asp.net实现文件下载
这是一个网站下载的一段代码:public partial class download : System.Web.UI.Page{ BaseClass BaseClass1 = new BaseClass(); protected void Page_Load(object sender, EventArgs e) { Page.EnableViewState = false; /* 微软为Response对象提供了一个新的方法TransmitFile来解决使用Response.BinaryWrite 下载超过400mb的文件时导致Aspnet_wp.exe进程回收而无法成功下载的问题。 代码如下: */ if (!IsPostBack) { //从数据库取得文件名 string sqlStr = "select * from sourceDownLoad where sId=" + Request.QueryString["id"]; DataTable dt = BaseClass1.ReadTable(sqlStr); DataTableReader reader = dt.CreateDataReader(); string sourceName = (string)dt.Rows[0].ItemArray[1]; sourceName.Trim();//消除空格 int index= sourceName.LastIndexOf("."); string extend = sourceName.Substring(index+1);//扩展名 string fullPath = "~/sourceDLoad/" + sourceName; fullPath = Server.MapPath(fullPath); //读出该资源的下载次数 int downloadtimes = 0; if (reader.Read())// { downloadtimes=reader.GetInt32(4); } Page.Response.Clear(); bool success = ResponseFile(Page.Request, Page.Response, sourceName ,fullPath , 1024000); if (!success) Response.Write("下载文件出错!"); else { //记录下载次数 downloadtimes++; sqlStr = "update sourceDownLoad set downloadCounts=" + downloadtimes + " where sId=" + Request.QueryString["id"]; BaseClass1.execsql(sqlStr); } Page.Response.End(); } } public static bool ResponseFile(HttpRequest _Request, HttpResponse _Response, string _fileName, string _fullPath, long _speed) { try { FileStream myFile = new FileStream(_fullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); BinaryReader br = new BinaryReader(myFile); try { _Response.AddHeader("Accept-Ranges", "bytes"); _Response.Buffer = false;//不缓冲 long fileLength = myFile.Length; long startBytes = 0; double pack = 10240; //10K bytes int sleep = 200; //每秒5次 即5*10K bytes每秒 int sleep = (int)Math.Floor(1000 * pack / _speed) + 1; if (_Request.Headers["Range"] != null) { _Response.StatusCode = 206; string[] range = _Request.Headers["Range"].Split(new char[] ); startBytes = Convert.ToInt64(range[1]); } _Response.AddHeader("Content-Length", (fileLength – startBytes).ToString()); if (startBytes != 0) { //Response.AddHeader("Content-Range", string.Format(" bytes -/", startBytes, fileLength-1, fileLength)); } _Response.AddHeader("Connection", "Keep-Alive"); _Response.ContentType = "application/octet-stream"; _Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(_fileName, System.Text.Encoding.UTF8)); br.BaseStream.Seek(startBytes, SeekOrigin.Begin); int maxCount = (int)Math.Floor((fileLength – startBytes) / pack) + 1; for (int i = 0; i < maxCount; i++) { if (_Response.IsClientConnected) { _Response.BinaryWrite(br.ReadBytes(int.Parse(pack.ToString()))); Thread.Sleep(sleep); } else { i = maxCount; } } } catch { return false; } finally { br.Close(); myFile.Close(); } } catch { return false; } return true; } //这样就实现了文件下载时,不管是什么格式的文件,都能够弹出打开/保存窗口.}9月
Ⅸ c# mvc文件上传大小限制maxrequestLength和maxAllowedContentLength的具体含义
EOF是end of file的缩写,表示”文字流”(stream)的结尾。这里的”文字流”,可以是文件(file),也可以是标准输入(stdin)。 EOF不是特殊字符,而是一个定义在头文件stdio.h的常量,一般等于-1。#define EOF (-1) 除了表示文件结尾,EOF还可以表示标准输入的结尾。但是,标准输入与文件不一样,无法事先知道输入的长度,必须手动输入一个字符,表示到达EOF。
Ⅹ 关于Asp.net目录下文件提供下载的权限
首先对iis进行配置,添加aspnet_isapi的应用程序通配符映射,使每次请求都托管给aspnet_isapi,这时才能确保对.rar之类的文件的请求可以由程序来处理…第2步是web.config中实现一个自己写的HttpHandler,主要针对*.rar,*.zip的请求,先判断请求来路,如果请求来路不是来自主机本身,则重定向到一个错误的页面即可.具体怎么实现你可以网上查下或者MSDN查下,很简单的..这时直接对文件的请求将不会发生下载效果了,而是被定向到另外个页面第3步,数据库设计时,每条文件记录肯定要加个权限等级的字段,只有大于这个等级的用户才能下载..具体怎么判断是很简单的了…还有,在输出下载文件列表时不要直接输出文件路径,而是 <a href="download.aspx?id=1">下载文件1</a> 这样的路径,在download.aspx中根据传来的id从数据库获得文件信息,判断权限…权限通过,则Response.Redrict(文件路径),否则重定向到权限不足的错误页面