// 1. 取得檔案資訊
string fileName = FileUpload.FileName;
string ext = fileName.Substring(fileName.LastIndexOf('.') + 1).ToLower();
// 2. 驗證副檔名
string[] allowed = { "rar", "doc", "txt", "pdf" };
if (!allowed.Contains(ext)) return; // 不符合直接返回
// 3. 驗證大小(50MB)
if (FileUpload.FileBytes.Length > 50 * 1024 * 1024) return;
// 4. 目標目錄
DirectoryInfo uploadDir = new DirectoryInfo(Server.MapPath("~/fileupload/"));
// 5. 確保目錄存在
if (!Directory.Exists(uploadDir.FullName))
Directory.CreateDirectory(uploadDir.FullName);
// 6. 儲存檔案(實際專案中建議重新命名避免衝突)
string savePath = Path.Combine(uploadDir.FullName, fileName);
FileUpload.SaveAs(savePath);
DirectoryInfo src = new DirectoryInfo(@"C:\abcd");
DirectoryInfo dst = new DirectoryInfo(@"C:\atest");
DirectoryInfo root = new DirectoryInfo(@"C:\");
if (!src.Exists) src.Create();
if (!dst.Exists) Directory.CreateDirectory(dst.FullName);
if (dst.Exists) dst.Delete(true); // 遞刪
src.MoveTo(dst.FullName); // 移動並重命名
// 列舉 C:\ 所有子目錄與檔案
foreach (var d in root.GetDirectories())
Console.WriteLine(d.FullName);
foreach (var f in root.GetFiles())
Console.WriteLine(f.FullName);

Seek)FileMode、FileAccess、FileShare 精細控制
// 基本
new FileStream(path, FileMode.Create);
// 完整控制
new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);

FileInfo fi = new FileInfo(@"C:\myfile.txt");
using (FileStream fs = new FileStream(fi.FullName, FileMode.Create))
{
byte[] data = new byte[100000];
new Random().NextBytes(data); // 產生隨機位元組
foreach (byte b in data)
fs.WriteByte(b); // 逐位元組寫入(教學用,實務用 Write(data, 0, data.Length))
}
| FileAccess | 允許操作 |
|---|---|
Read | 讀取 |
Write | 寫入 |
ReadWrite | 讀寫皆可 |
// 唯讀開啟
FileStream fs = new FileStream(@"C:\tab.txt", FileMode.OpenOrCreate, FileAccess.Read);

| 成員 | 說明 |
|---|---|
Read(byte[], offset, count) | 讀取位元組到陣列,回傳實際讀取數 |
Write(byte[], offset, count) | 從陣列寫入位元組 |
Seek(offset, origin) | 移動指標位置 |
Position | 目前指標位置 |
Length | 串流長度 |
Flush() | 清除緩衝區寫入底層 |
Close() / Dispose() | 釋放資源 |
CanRead/CanWrite/CanSeek | 能力查詢 |
Directory/DirectoryInfo 提供目錄結構操作能力,配合 FileStream 的位元組級隨機存取,構成 .NET 檔案系統操作的底層基礎。上層應用通常改用 StreamReader/Writer(文字)、BinaryReader/Writer(結構化二進位)、XmlSerializer/JsonSerializer(序列化)等更高階 API,但理解 FileStream 的指標、模式、共享機制,對排查效能、並發、大檔案處理問題至關重要。