程序中有時避免不了要使用臨時文件,但在微軟的.新平台中,許多編程者還未利用Path對象的便利條件來處理臨時文件,仍然手工確定應用程序當前目錄中的唯一文件名,並在程序用完之後刪除。
本文要演示的技巧,是通過使用Path類,以一兩行的代碼,就可完成下述任務:
1、 定位"temp"目錄。
2、 創建唯一的、優化過的臨時文件。
3、 使用完後刪除臨時文件。
定位"Temp"目錄
要確定"temp"目錄,可使用Path::GetTempPath靜態方法,此處重點要注意的是,需把對此方法的調用,放在一個try/block塊中,因為基於當前用戶的權限,很可能會拋出一個SecurityException(安全異常)。
using namespace System::Security;
using namespace System::IO;
...
String tempFolder;
try
{
tempFolder = Path::GetTempPath();
}
catch(SecurityException* ex)
{
//很可能意味著你沒有所需的權限
}
catch(Exception* ex)
{
//處理其他所有異常
}
創建並優化臨時文件
在此可使用Path::GetTempFileName來得到臨時文件的唯一名稱,這個方法會創建一個文件,並返回最近創建的文件名。
文件屬性被設為"存檔",實質上為了防止 .NET對它進行優化,因此,如果把文件屬性改為其他的,就可以從 .NET運行時(runtime)緩存中得到一小點的性能提升。
一開始,要使用臨時文件名來構造一個FileInfo對象,並設置FileInfo的Attributes為FileAttributes::Temporary:
using namespace System::Security;
using namespace System::IO;
...
String* fileName;
fileName->Empty;
try
{
//創建一個長度為零的臨時文件
fileName = Path::GetTempFileName();
//把文件屬性設為"Temporary"以獲得更好的性能
FileInfo* myFileInfo = new FileInfo(fileName);
myFileInfo->Attributes = FileAttributes::Temporary;
...
}
catch(Exception* ex)
{
//處理異常
}
使用及刪除臨時文件
一旦創建了臨時文件,就可像使用其他文件一樣使用它,例如,可在上面的try/block塊中插入以下代碼,其使用了StreamWriter類在臨時文件中寫入一條簡單的字符串:
//向臨時文件中寫入數據
StreamWriter* writer = File::AppendText(fileName);
writer->WriteLine("A test sample data");
writer->Flush();
writer->Close();
寫入的數據可通過下面的StreamReader讀取,在此,可把整個文件的內容都讀入到一個String對象中:
StreamReader* reader = File::OpenText(fileName);
最後,在使用完了臨時文件,可用File::Delete來刪除,只需簡單地傳遞進文件名就行了:
File::Delete(fileName);