2、创建文件夹及设置访问权限
在当前路径下输入新文件夹名称来创建新文件夹,通过调用.NET的IO名字空间中的类库Directory方法来实现该操作:Directory.CreateDirectory(string directory),字符串directory表示新建文件夹的完整路径,该方法默认向所有用户开放新文件夹的完全读写访问权限。对于网络硬盘共享根文件夹可手动进行创建,并设置写入权限,通过执行"internet信息服务"的"权限向导"来设置访问权限,可以设置密码来指定是否允许用户进入该文件夹以及是否允许用户删除该文件夹。此外,为了管理这些文件夹,需要保留相关设置信息:如文件夹名、位置、受限操作类型、密码及创建者等。将这些信息写入XML文件,随后通过读写该XML文件来实现对文件夹的相关操作。
Public void CreateXmlOrAddFrag (string xmlFullPath, string folderFullPath, string owner, string password, int type){ XmlDocument xmlDoc=new XmlDocument(); string xml=""; String xmlNode="<character>"; XmlNode+="<full Path>"; XmlNode+=folderFullPath; XmlNode+="</full Path>"; XmlNode+="<owner>"; XmlNode+=owner; XmlNode+="</owner>"; xmlNode+="<password>"; xmlNode+=password; xmlNode+="</password>"; xmlNode+="<type>"; xmlNode+=type; xmlNode+="</type>"; xmlNode+="</character>"; if(!File.Exists(xmlFullPath)){//若不存在则创建xml存储文件 xml="<?xml version=’1.0’ encoding=’gb2312’?>"; xml+="<folder>"; xml+=xmlNode; xml+="</folder>"; xmlDoc.LoadXml(xml); xmlDoc.Save(xmlFullPath);//存储文件 } else{//存在xml存储文件则添加新的文档片段 xmlDoc.Load(xmlFullPath); XmlDocumentFragment docFrag=xmlDoc.CreateDocumentFragment();//文档片元素节点 docFrag.InnerXml=xmlNode; XmlNode currNode=xmlDoc.DocumentElement;//获取文档根节点 currNode.InsertBefore(docFrag,currNode.FirstChild);//插入文档片段 xmlDoc.Save(xmlFullPath);//存储改变内容 } } |
其中,参数fileFullPath是存储文件夹信息的XML文件路径,folderFullPath是此新文件夹路径,owner是创建者名,password是密码,type表示限制操作的类型("0"表示进入受限,"1"表示删除受限)。程序首先判断存储文件夹信息的文件是否存在,不存在则动态创建文件,之后新建文件夹时,只需添加文档片段即可。这里,对XML文件的读写通过文档对象模型DOM实现,由于此处XML文件不会很大,因此对内存资源要求不会太高,速度会很快。
3、对文件及文件夹的操作
对文件的操作包括"下载"和"删除"两种,用下面的语句实现下载功能:
dr[2]="<a href="+url+" target=_blank"+">下载</a>";//建立联接地址 |
其中,url是指定文件对应的服务器路径。 通过这样的链接将文件定位到服务器上的对应位置,客户端可以下载文件到本机上,也可在服务器上打开它。
删除文件则利用.NET的IO命名空间的File类库中的方法实现:File. Delete(string filename);其中,filename为文件的完整路径。
如果文件夹在创建时被设置为"进入受限"或者"删除受限",用户在执行这样的操作时将被要求密码验证,只有通过验证才能完成相应的操作。. NET的Directory类库提供的方法Delete()只能删除空文件夹,因此需要先清空文件夹中的内容,然后才能完成此操作。由于文件夹中可能还包含有文件夹,这里通过递归调用实现该操作:
Public void Delete Folder (string dir) { For each (string d in Directory.GetFileSystemEntries (dir)) { If (File. Exists (d)) File. Delete(d);//直接删除其中的文件 Else Delete Folder(d);//递归删除子文件夹 } Directory. Delete(dir);//删除已空文件夹 } |
其中,参数dir是待删除文件夹的完整路径。程序使用循环语句,查找文件夹中的内容,若是文件则直接删除,若是文件夹,则递归调用方法自身来删除子文件夹,文件夹清空后再完成删除操作。
4、文件上传
.NET提供的类库HttpPostedFile和HttpFilesCollection可以访问上传到服务器的文件,并且可以控制文件上传过程。HttpPostedFile类封装已上传到服务器的文件对象,其方法和属性提供对每个文件内容和属性的访问;HttpFilesCollection类为多个HttpPostedFile对象提供一个容器,保存上传给服务器的数据结构的类,利用被传送的文件集合的Files属性从HttpRequest对象加以访问。
1)客户端表单的编码类型Enctype 设置为multipart/form-data的MIME格式,提交表单使用HTTP的post方法:
<Form id="form1" method="post" enctype="multipart/form-data/form-data" runat="server" > |
2)HttpInputFile控件运行在服务器端,设置方法如下:
<INPUT id="file Up" type="file" size="6" runat="server"> |
3)如果要上传多个文件,可设置多个HttpInputFile控件,然后利用HttpRequest.Files来分别获取这些文件。
5、跟踪"当前路径"值
由于需要在不同的文件夹之间跳转,而所有文件夹的内容都通过同一个页面Default.aspx来显示,当传送查询字符串调用它时,可以设置一个静态变量实现路径的完整表示:public static string currFullPath=""。当前路径发生改变时,将路径值传送给这个静态变量,该变量始终存储当前路径值,用它作为查询字符串调用显示页:currFullPath=Request["path"]。因此,利用Response. Redirect ("Default.aspx? path="+currFullPath) 语句总能显示当前文件夹下的内容。
6、环境配置文件Web.config的处理
在中文状态下,需要将全球化设置编码由默认的"Utf-8"改为"gb2312":
<Globalization Request Encoding="gb2312" Response Encoding="gb2312" /> |
同时,考虑到Web.config默认设置的文件大小可能不能满足实际需要,通过修改参数maxRequestLength的值,可将其尺度适当放大一些:
<HttpRuntime maxRequestLength="500000"> </httpRuntime> |
结束语 ASP.NET技术与XML技术是当前网络开发应用的热点,在数据传输、信息发布、电子支付及网络安全等诸多领域被广泛应用。这里将相关技术结合起来开发网络硬盘,实现系统资源共享,不仅可以满足用户的基本需求、操作简便,而且可有效保护用户私有数据不被非法访问,具有一定安全性,便于维护,因此在文件传输系统、网上考试系统以及新闻发布系统等实际应用中,均可广泛采用这种处理模式。
查看本文来源