.NET IO 核心為 System.IO.Stream(位元組串流)與 TextReader/TextWriter(字元串流)。常用衍生類別:
| 類別 | 用途 |
|---|---|
| FileStream | 檔案位元組讀寫 |
| MemoryStream | 記憶體緩衝區 |
| BufferedStream | 加緩衝提升效能 |
| StreamReader/Writer | 文字檔讀寫(編碼支援) |
| StringReader/Writer | 字串當作串流 |
| BinaryReader/Writer | 基本型別二進位讀寫 |
程式啟動自動建立:
Console.In (TextReader) —— 標準輸入Console.Out (TextWriter) —— 標準輸出Console.Error (TextWriter) —— 標準錯誤// 寫入
StreamWriter^ sw = gcnew StreamWriter("log.txt", false, Encoding::UTF8);
sw->WriteLine("Line 1");
sw->WriteLine("Line 2");
sw->Close();
// 讀取
StreamReader^ sr = gcnew StreamReader("log.txt", Encoding::UTF8);
String^ line;
while ((line = sr->ReadLine()) != nullptr)
Console::WriteLine(line);
sr->Close();
// 寫入
FileStream^ fs = File::Open("data.bin", FileMode::Create);
BinaryWriter^ bw = gcnew BinaryWriter(fs);
bw->Write(123);
bw->Write(3.14);
bw->Write("Hello");
bw->Close();
// 讀取
fs = File::Open("data.bin", FileMode::Open);
BinaryReader^ br = gcnew BinaryReader(fs);
int i = br->ReadInt32();
double d = br->ReadDouble();
String^ s = br->ReadString();
br->Close();
FileInfo^ fi = gcnew FileInfo("test.txt");
Console::WriteLine("Size: {0}, Created: {1}", fi->Length, fi->CreationTime);
DirectoryInfo^ di = gcnew DirectoryInfo(".");
for each (FileInfo^ f in di->GetFiles("*.txt"))
Console::WriteLine(f->Name);
String^ full = Path::GetFullPath("..\\data.txt");
String^ dir = Path::GetDirectoryName(full);
String^ name = Path::GetFileName(full);
String^ ext = Path::GetExtension(full);
String^ tmp = Path::GetTempFileName(); // 建立唯一暫存檔
using 區塊(C++/CLI 無 using 關鍵字,請用 try/finally 確保 Close()/Dispose())。Encoding::UTF8)避免跨平台亂碼。FileStream + 緩衝區手動讀寫,避免一次載入記憶體。BeginRead/EndRead 或 Task(.NET 4.5+)提升回應性。