一,Directory 和Directory Info的应用
在Asp,net的实际应用中,上传文件的实现过程中要用到有关目录的操作,来现实文件的上传工作.下面分析下用C#完成文件上传过程的核心代码,其中控件FileUpload用来获取文件/
-------------代码段----------
string filename = FileUploadFileName;//获取上传文件的名字
string filetype = FileUploadFileName.Substring(filename.LastIndexOf(".")+1).ToLower();
上传文件的格式
if (filetype == "rar" || filetype == "doc" || filetype == "txt" || filetype == "pdf")
{//判断是文件格式是否是指定的格式
if (FileUploadFileBytes.Length <= 50 * 1024 * 1024)//判断文件的大小是否满足要求
{
DirectoryInfo filedir = new DirectoryInfo(Server.MapPath("fileupload/"));//获取文件夹fileupload在系统中的相对目录.
// 创建DirectoryInfo实例对象 filedir用来指向保存上传文件的目录.
if (!Directory. Exists(filedir.ToString()))Directory类的静态方法,用来判断目录是否存在
{
Directory.CreateDirectory(filedir.ToString());//如果所要求的目录不存在,调用Directory的静态方法CreateDirectory创建目录.
}
-------------代码段----------
DirectoryInfo常用方法:
DirectoryInfo dif = new DirectoryInfo("c:\\abcd"); DirectoryInfo temp = new DirectoryInfo("c:\\atest"); DirectoryInfo temp3 = new DirectoryInfo("C:\\"); if (!dif.Exists) dif.Create(); if (!temp.Exists) Directory.CreateDirectory(temp.ToString()); if (temp.Exists) temp.Delete(); dif.MoveTo(temp.ToString()); DirectoryInfo[] idr = temp3.GetDirectories();//获取当前目录下的所有子目录. foreach (DirectoryInfo dir in idr) Console.WriteLine(dir.FullName); FileInfo[] files = temp3.GetFiles(); foreach (FileInfo file in files) Console.WriteLine(file.FullName); |
输出C盘子目录信息:
|
在程序运行之前和之后的C盘目录截图,比较变化的情况,多了个atest目录.
二. 文件读写
C#和java对于文件的操作的思路有点相似,都是采用管道技术和流操作—Stream来实现相应的功能.,开始操作文件的时候用到文件专用流:System.IO命名空间下的Filestream.,其构造函数有很多,现在先介绍一个很常用的方法:
FileStream 构造函数 (String, FileMode);
FileMode有:open,create,openOrcreate,createnew.append, Truncate等几种模式.
下面先看一个例子:
FileInfo mynewfile = new FileInfo("C:\\myfile.txt");//
FileStream sf = new FileStream(mynewfile.ToString(), FileMode.Create);//构造函数,以创建模式打开目标文件,如果不存在就创建相应的文件.
byte[] dataArray = new byte[100000];//字节
new Random().NextBytes(dataArray);//创建随机字节
for (int i = 0; i < dataArray.Length; i++)
{
sf.WriteByte(dataArray[i]);//将字节写入文件理.
}
其他构造方法有:
我在这里就不多介绍了,大家可以参考Msdn的文件.关于文件的读写还有个更好的StreamWriter/和StreamReader.下一节将继续介绍.
FielStream类操作的是字节和字节数组,字符数据易于使用,但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行。
FielStream类维护内部文件指针,该指针指向文件中进行下一次读写操作的位置。
FileStream只能处理原始字节(raw byte),处理原始字节的功能使用FileStream类可以用于处理任何数据文件。