signet
在.net開發中,對於檔案系統操作的相關類,幾乎(但不是全部)都在system.io命名空間中。
而用於瀏覽檔案系統和執行操作的,如移動、複製和刪除檔案等,有以下幾個類:
system.marshalbyrefobject - 這是.net類中用於遠端操作的基物件類。它允許在應用程式域之間編組資料。
filesysteminfo - 這個表示任何檔案系統物件的基類。
fileinfo和file - 這些類表示檔案系統上的檔案。
directoryinfo 和 directory - 這些類表示檔案系統上的資料夾。
path - 這個類包含的靜態成員可以用於處理路徑名。
driveinfo - 它的屬性和方法提供了指定驅動器的資訊。
以上的directory 類和file 類只包含靜態方法,不能被例項化。如果只對資料夾或者檔案執行乙個操作,使用這些類是很有效的,因為這樣可以省去例項化.net類的系統開銷。
directoryinfo 和 fileinfo 類實現與directory類和file類大致相同的公共方法,並擁有公共屬性和建構函式,但他們都是有狀態的,並且這些類的成員都不是靜態的。
using system;對於資料夾(或者「目錄」)的操作,就可以例項化directoryinfo或者使用directory類。using system.collections.generic;
using system.io;//檔案操作的命名空間}}
using system;執行以上**,你會發現,報錯了.....using system.collections.generic;
using system.io;//檔案操作的命名空間}}
這個是為什麼呢?為什麼directoryinfo類在例項化的時候沒有丟擲異常,卻在呼叫其實例方法時候丟擲了異常呢?
原因很簡單,因為directoryinfo類在通過資料夾路徑字串例項化物件時,是不會對路徑進行驗證的,而在其呼叫例項方法的時候,才會對其進行驗證。
所以,我們可以進行以下操作:
using system;執行結果如下:using system.collections.generic;
using system.io;//檔案操作的命名空間
else
console.readline();//等待輸入 方便檢視結果}}
}
很顯然,提示路徑不存在!
常用屬性列表:
名稱作用
creationtime建立檔案或資料夾的時間
directoryname(僅用於fileinfo)
包含資料夾的完整路徑名
parent(僅用於directoryinfo)
指定子目錄的父目錄
exists
檔案或資料夾是否存在
extension
檔案的副檔名,對於資料夾返回空白
fullname
檔案或資料夾的完整路徑名
lastaccesstime
最後一次訪問檔案或資料夾的時間
lastwritetime
最後一次修改檔案或資料夾的時間
name
檔案或資料夾的名稱
root(僅用於directoryinfo)
路徑的根部分(磁碟名稱)
length(僅用於fileinfo)
返回檔案的大小(以位元組為單位)
常用方法列表:
名稱作用
create()
建立給定名稱的資料夾或者空檔案。對於fileinfo,該方法會返回乙個流物件,以便寫入檔案。
delete()
刪除檔案或者資料夾。對於資料夾,有乙個可以遞迴的delete選項。
moveto()
移動和/或重新命名檔案或資料夾。
copyto()
(只適用fileinfo)複製檔案,注意資料夾沒有複製方法。如果複製完整的目錄樹,需要單獨複製每個檔案,建立對應於舊資料夾的新檔案。
getdiectories()
(只適用於directoryinfo)返回directoryinfo物件陣列,該陣列表示資料夾中包含的所有資料夾。
getfiles()
(只適用於fileinfo)返回fileinfo物件陣列,該陣列表示資料夾中包含的所有檔案。
getfilesysteminfos()
返回fileinfo和directoryinfo物件,它把資料夾中包含的所有物件表示為乙個filesysteminfo引用陣列。
directoryinfo myfolder = new directoryinfo(@"c:\my");//通過資料夾路徑字串 例項化directoryinfo物件輸出結果資訊如下:if (!myfolder.exists)//判斷檔案目錄是否存在
myfolder.create();//不存在 則建立資料夾
//輸出檔案目錄資訊
console.writeline(myfolder.creationtime.tostring());//輸出檔案目錄的建立時間
console.writeline(myfolder.parent.tostring());//輸出 其上級目錄
console.writeline(myfolder.root.tostring());//輸出 路徑的根部分(磁碟名稱)
console.writeline(myfolder.fullname);//輸出 資料夾的完整路徑名
console.readline();//等待輸入 方便檢視結果
中間輸出上級目錄 為空?這個理由很簡單,因為c:\my路徑的上級目錄就為磁碟c了,所以不存在上級目錄了,故為空。
path類不能夠例項化,但他提供了一些靜態方法,可以很容易的對路基名進行操作。
例如,我要顯示資料夾 d:\我的資料庫\downloads 中的 11.txt 檔案的完整路徑名,可以用以下**查詢檔案的路徑
//combine方法: 將字串陣列組合成乙個路徑輸出結果如下:console.writeline(system.io.path.combine(@"d:\我的資料庫\downloads", "11.txt"));
console.readline();
好,可能你會問我,直接拼湊字串不就可以了嗎?
好,那我告訴你答案:因為path類在處理不同作業系統上的路徑時,能夠識別不同的格式。例如:windows上是用「\」作為路徑的分割符號,
而unix上路徑的分割符號是「/」,所以如果現在的系統要移植到unix或者其它非windows系統上,那豈不是會識別不了,甚至發生錯誤。
所以,出於這樣的考慮還是推薦使用path類來拼接路徑字串。
path類的一些靜態字段:
屬性說明
altdirectoryseparatorchar
提供一種與平台無關的方式,來指定分隔目錄級別的另乙個字元。在windows上使用「/」符號,而在unix上使用「\」符號。
directoryseparatorchar
提供一種與平台無關的方式,來指定分隔目錄級別的另乙個字串。在windows上使用「/」符號,在unix上使用「\」符號。
pathseparator
提供一種與平台無關的方式,來指定劃分環境變數的路徑字串,預設為分號
volumeseparatorchar
提供一種與平台無關的方式,來指定容量分隔符,預設為冒號
1 檔案測試 2 檔案操作
1 檔案測試函式 2 檔案操作 新建檔案 fopen filename,w 以 寫 的方式開啟乙個不存在的檔案,就會新建該檔案 檔案刪除 unlink 檔案複製 copy filename,aaa bb.txt 盡量使用 和相對路徑,因為linux只認 也沒有磁碟分割槽,而windows 和 都認 ...
檔案操作《1》檔案的讀寫
檔案操作在c語言中是乙個不能忽略的知識點,學習檔案操作也可以解除大家對檔案的誤解,可能許多人會認為只有資料夾中的文字檔案,編譯c語言時的原始檔和標頭檔案才是檔案等,其實不能,計算機中的顯示器 滑鼠 鍵盤 印表機等都可以稱為檔案,沒想到吧,其中的鍵盤是標準輸入檔案,顯示器是標準輸出檔案 理解了檔案後我...
1 檔案io操作習題
4 1 tee命令是從標準輸入中讀取資料,直至檔案結尾,隨後將資料寫入標準輸入和命令列引數所指定的檔案。請使用i o系統呼叫實現tee命令,預設情況下,若已存在命令列引數指定檔案同名的檔案tee命令會將其覆蓋。如檔案以存在,請實現 a命令列選項 tee a file 在檔案結尾出追加資料。inclu...