一,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類可以用於處理任何數據文件。