ในการออกแบบฟังก์ชัน "ฮาร์ดดิสก์เครือข่าย" คุณต้องคุ้นเคยกับการทำงานของการประมวลผลไฟล์และโฟลเดอร์ใน .NET ก่อน คลาสไฟล์และคลาสไดเร็กทอรีเป็นสองคลาสที่สำคัญที่สุด การทำความเข้าใจสิ่งเหล่านี้จะช่วยอำนวยความสะดวกในการใช้งานฟังก์ชั่นที่ตามมาอย่างมาก
คลาส System.IO.File และคลาส System.IO.FileInfo
จะใช้เนื้อหาที่เกี่ยวข้องกับการทำงานของระบบไฟล์อย่างกว้างขวางในกระบวนการออกแบบและใช้งาน "ฮาร์ดดิสก์เครือข่าย" ดังนั้น ในส่วนนี้จะแนะนำคลาส .NET สองคลาสที่เกี่ยวข้องกับระบบไฟล์โดยย่อก่อน
คลาส System.IO.File และคลาส System.IO.FileInfo จัดเตรียมการดำเนินการต่างๆ ที่เกี่ยวข้องกับไฟล์เป็นหลัก และคุณจำเป็นต้องอ้างอิงเนมสเปซ System.IO เมื่อใช้งาน คุณลักษณะและวิธีการหลักมีการแนะนำด้านล่างผ่านตัวอย่างโปรแกรม
(1) วิธีการเปิดไฟล์: File.Open
การประกาศวิธีนี้มีดังนี้:
public static FileStream Open(string path,FileMode mode)
รหัสต่อไปนี้จะเปิดไฟล์ชื่อ newFile.txt ที่จัดเก็บไว้ในไดเร็กทอรี c:tempuploads และ ในไฟล์เขียนสวัสดีใน.
โมฆะส่วนตัว OpenFile()
-
FileStream.TextFile=File.Open(@"c:tempuploadsnewFile.txt",FileMode.Append);
ไบต์ [] ข้อมูล = {(ไบต์)'h',(ไบต์)'e',(ไบต์)'l',(ไบต์)'l',(ไบต์)'o'};
TextFile.Write (ข้อมูล, 0, ข้อมูลความยาว);
TextFile.ปิด();
}
(2) วิธีการสร้างไฟล์: File.Create
การประกาศวิธีการนี้เป็นดังนี้:
สร้าง FileStream แบบคงที่สาธารณะ (เส้นทางสตริง;)
รหัสต่อไปนี้สาธิตวิธีการสร้างไฟล์ชื่อ newFile.txt ภายใต้ c:tempuploads
เนื่องจากเมธอด File.Create ให้สิทธิ์การเข้าถึงแบบอ่าน/เขียนไฟล์ใหม่โดยค่าเริ่มต้นสำหรับผู้ใช้ทุกคน ไฟล์จึงถูกเปิดด้วยสิทธิ์การอ่าน/เขียน และต้องปิดก่อนจึงจะสามารถเปิดได้โดยแอปพลิเคชันอื่น เมื่อต้องการทำเช่นนี้ คุณต้องใช้วิธีการปิดของคลาส FileStream เพื่อปิดไฟล์ที่สร้างขึ้น
MakeFile เป็นโมฆะส่วนตัว ()
-
FileStream NewText=File.Create(@"c:tempuploadsnewFile.txt");
NewText.ปิด();
}
(3) วิธีการลบไฟล์: File.Delete
วิธีการนี้มีการประกาศดังนี้:
public static void Delete(string path);
รหัสต่อไปนี้สาธิตวิธีการลบไฟล์ newFile.txt ในไดเร็กทอรี c:tempuploads
โมฆะส่วนตัว DeleteFile()
-
File.Delete(@"c:tempuploadsnewFile.txt");
}
(4) วิธีการคัดลอกไฟล์: File.Copy
วิธีการนี้มีการประกาศดังนี้:
public static void Copy(string sourceFileName,string destFileName,bool overwrite);
รหัสต่อไปนี้จะคัดลอก c:tempuploadsnewFile.txt ไปยัง c:tempuploads BackUp.txt.
เนื่องจากพารามิเตอร์ OverWrite ของวิธี Cope ถูกตั้งค่าเป็นจริง หากมีไฟล์ BackUp.txt อยู่แล้ว ไฟล์นั้นจะถูกเขียนทับโดยไฟล์ที่คัดลอก
CopyFile เป็นโมฆะส่วนตัว ()
-
File.Copy(@"c:tempuploadsnewFile.txt",@"c:tempuploadsBackUp.txt",true);
}
(5) วิธีการย้ายไฟล์: File.Move
วิธีการนี้มีการประกาศดังนี้:
public static void Move(string sourceFileName,string destFileName);
รหัสต่อไปนี้สามารถย้ายไฟล์ BackUp.txt ภายใต้ c:tempuploads ไปยังไดเร็กทอรีรากของ ขับค
หมายเหตุ:
การถ่ายโอนไฟล์สามารถทำได้ภายใต้โลจิคัลดิสก์เดียวกันเท่านั้น หากคุณพยายามถ่ายโอนไฟล์จากไดรฟ์ c ไปยังไดรฟ์ d จะเกิดข้อผิดพลาดขึ้น
โมฆะส่วนตัว MoveFile()
-
File.Move(@"c:tempuploadsBackUp.txt",@"c:BackUp.txt");
}
(6) ตั้งค่าวิธีแอตทริบิวต์ของไฟล์: File.SetAttributes
วิธีการนี้มีการประกาศดังต่อไปนี้:
SetAttributes โมฆะสาธารณะแบบคงที่ (เส้นทางสตริง, FileAttributes fileAttributes);
รหัสต่อไปนี้สามารถตั้งค่าแอตทริบิวต์ของไฟล์ c:tempuploadsnewFile.txt ได้ อ่านอย่างเดียวหรือซ่อน
SetFile เป็นโมฆะส่วนตัว ()
-
File.SetAttributes(@"c:tempuploadsnewFile.txt",
FileAttributes.ReadOnly|FileAttributes.Hidden);
}
นอกเหนือจากแอตทริบิวต์อ่านอย่างเดียวและซ่อนที่ใช้กันทั่วไปแล้ว ไฟล์ยังมีไฟล์เก็บถาวร (สถานะไฟล์เก็บถาวร), ระบบ (ไฟล์ระบบ), ชั่วคราว (ไฟล์ชั่วคราว) เป็นต้น สำหรับรายละเอียดเกี่ยวกับคุณสมบัติของไฟล์ โปรดดูคำอธิบายของ FileAttributes ใน MSDN
(7) วิธีการตรวจสอบว่ามีไฟล์อยู่หรือไม่: File.Exist
วิธีการนี้มีการประกาศดังนี้:
public static bool Exists(string path);
รหัสต่อไปนี้กำหนดว่าไฟล์ c:tempuploadsnewFile.txt มีอยู่หรือไม่ หากมีอยู่ ให้คัดลอกไฟล์ก่อน จากนั้นจึงลบออก และสุดท้ายให้ย้ายไฟล์ที่คัดลอก หากไม่มี ให้สร้างไฟล์ก่อน จากนั้นจึงเปิดไฟล์และดำเนินการเขียน และสุดท้ายให้ตั้งค่าแอตทริบิวต์ของไฟล์เป็นแบบอ่านอย่างเดียว และซ่อนอยู่
if(File.Exists(@"c:tempuploadsnewFile.txt")) //ตรวจสอบว่ามีไฟล์อยู่หรือไม่
-
CopyFile(); //คัดลอกไฟล์DeleteFile(); //ลบไฟล์MoveFile();
-
อื่น
-
MakeFile(); //สร้างไฟล์ OpenFile(); //เปิดไฟล์ SetFile(); //ตั้งค่าแอตทริบิวต์ของไฟล์
}
นอกจากนี้ คลาส File ยังให้การสนับสนุนข้อความตัวอักษรเพิ่มเติมอีกด้วย
· AppendText: เพิ่มข้อความต่อท้ายไฟล์ที่มีอยู่
· CreateText: สร้างหรือเปิดไฟล์ใหม่สำหรับการเขียนข้อความ
· OpenText: เปิดไฟล์ข้อความที่มีอยู่เพื่ออ่าน
แต่วิธีการข้างต้นใช้งานได้กับข้อความที่เข้ารหัส UTF-8 เป็นหลัก จึงปรากฏว่า ไม่ยืดหยุ่นเพียงพอ ขอแนะนำให้ผู้อ่านใช้โค้ดต่อไปนี้เพื่อใช้งานไฟล์ txt
· ดำเนินการ "อ่าน" บนไฟล์ txt โค้ดตัวอย่างจะเป็นดังนี้:
StreamReader TxtReader = new StreamReader(@"c:tempuploadsnewFile.txt",System.Text.Encoding.Default);
สตริงเนื้อหาไฟล์;
FileContent = TxtReader.ReadEnd();
TxtReader.Close();
· ดำเนินการ "เขียน" บนไฟล์ txt โค้ดตัวอย่างจะเป็นดังนี้:
StreamWriter = new StreamWrite(@"c:tempuploadsnewFile.txt",System.Text.Encoding.Default);
สตริงเนื้อหาไฟล์;
TxtWriter.Write (เนื้อหาไฟล์);
TxtWriter.Close();
คลาส System.IO.Directory และคลาส System.DirectoryInfo
จัดเตรียมการดำเนินการต่างๆ บนไดเร็กทอรีเป็นหลัก และคุณจำเป็นต้องอ้างอิงเนมสเปซ System.IO เมื่อใช้งาน คุณลักษณะและวิธีการหลักมีการแนะนำด้านล่างผ่านตัวอย่างโปรแกรม
(1) วิธีการสร้างไดเร็กทอรี: Directory.CreateDirectory
วิธีการนี้มีการประกาศดังนี้:
DirectoryInfo CreateDirectory แบบคงที่สาธารณะ (เส้นทางสตริง)
รหัสต่อไปนี้สาธิตการสร้างไดเร็กทอรีชื่อ NewDirectory ในโฟลเดอร์ c:tempuploads
MakeDirectory เป็นโมฆะส่วนตัว ()
-
Directory.CreateDirectory(@"c:tempuploadsNewDirectoty");
}
(2) วิธีการตั้งค่าแอตทริบิวต์ไดเรกทอรี:
รหัสด้านล่าง DirectoryInfo.Atttributes จะตั้งค่าไดเรกทอรี c:tempuploadsNewDirectory เป็นแบบอ่านอย่างเดียวและซ่อนไว้ เช่นเดียวกับแอตทริบิวต์ของไฟล์ คุณลักษณะของไดเร็กทอรีจะถูกตั้งค่าโดยใช้ FileAttributes เช่นกัน
SetDirectory เป็นโมฆะส่วนตัว ()
-
DirectoryInfo NewDirInfo = DirectoryInfo ใหม่(@"c:tempuploadsNewDirectoty");
NewDirInfo.Atttributes = FileAttributes.ReadOnly|FileAttributes.Hidden;
}
(3) วิธีการลบไดเร็กทอรี: Directory.Delete
วิธีการนี้มีการประกาศดังนี้:
public static void Delete(string path,bool recursive);
รหัสต่อไปนี้สามารถลบไดเร็กทอรี c:tempuploadsBackUp พารามิเตอร์ตัวที่สองของเมธอด Delete จะเป็นประเภท bool ซึ่งสามารถกำหนดได้ว่าจะลบไดเร็กทอรีที่ไม่ว่างเปล่าหรือไม่ หากค่าพารามิเตอร์เป็นจริง ไดเร็กทอรีทั้งหมดจะถูกลบ แม้ว่าจะมีไฟล์หรือไดเร็กทอรีย่อยอยู่ในไดเร็กทอรีก็ตาม หากเป็นเท็จ ไดเร็กทอรีจะถูกลบเฉพาะในกรณีที่ว่างเปล่า
โมฆะส่วนตัว DeleteDirectory()
-
Directory.Delete(@"c:tempuploadsBackUp",true);
}
(4) วิธีการย้ายไดเรกทอรี: Directory.Move
วิธีการนี้มีการประกาศดังต่อไปนี้:
โมฆะคงที่สาธารณะ Move (string sourceDirName, สตริง destDirName);
รหัสต่อไปนี้จะย้ายไดเรกทอรี c:tempuploadsNewDirectory ไปที่ c:tempuploadsBackUp
โมฆะส่วนตัว MoveDirectory()
-
File.Move(@"c:tempuploadsNewDirectory",@"c:tempuploadsBackUp");
}
(5) รับไดเร็กทอรีย่อยทั้งหมดในไดเร็กทอรีปัจจุบัน: Directory.GetDirectories
วิธีการนี้ถูกประกาศดังนี้:
public static string[] GetDirectories(string path;);
รหัสต่อไปนี้จะอ่านไดเร็กทอรีย่อยทั้งหมดในไดเร็กทอรี c:tempuploads และเก็บไว้ในอาร์เรย์สตริง
GetDirectory เป็นโมฆะส่วนตัว ()
-
สตริง [] ไดเร็กทอรี;
ไดเรกทอรี = ไดเรกทอรี GetDirectories (@"c:tempuploads");
}
(6) วิธีการรับไฟล์ทั้งหมดในไดเร็กทอรีปัจจุบัน: Directory.GetFiles
วิธีการนี้มีการประกาศดังนี้:
public static string[] GetFiles(string path;);
รหัสต่อไปนี้จะอ่านไฟล์ทั้งหมดใน c:tempuploads directory และจัดเก็บไว้ในอาร์เรย์สตริง
GetFile เป็นโมฆะส่วนตัว ()
-
สตริง [] ไฟล์;
ไฟล์ = ไดเรกทอรี GetFiles (@"c:tempuploads",);
}
(7) วิธีการตรวจสอบว่ามีไดเร็กทอรีอยู่หรือไม่: Directory.Exist
วิธีการนี้มีการประกาศดังนี้:
public static bool Exists(
เส้นทางสตริง
โค้ดต่อไปนี้กำหนดว่าไดเร็กทอรี c:tempuploadsNewDirectory มีอยู่หรือ
ไม่
หากมีอยู่ ขั้นแรกให้รับไดเร็กทอรีย่อยและไฟล์ในไดเร็กทอรี จากนั้นจึงย้ายและสุดท้ายก็ลบไดเร็กทอรีที่ถูกย้าย หากไม่มีอยู่ ให้สร้างไดเร็กทอรีก่อน จากนั้นตั้งค่าแอตทริบิวต์ไดเร็กทอรีเป็นแบบอ่านอย่างเดียวและซ่อนไว้
if(File.Exists(@"c:tempuploadsNewDirectory")) //ตรวจสอบว่ามีไดเร็กทอรีอยู่หรือไม่
-
GetDirectory(); //รับไดเร็กทอรีย่อย GetFile(); //รับไฟล์ MoveDirectory(); //ลบไดเร็กทอรี
-
อื่น
-
MakeDirectory(); //สร้างไดเร็กทอรี SetDirectory(); //ตั้งค่าแอตทริบิวต์ไดเร็กทอรี
}
หมายเหตุ:
มีสามวิธีในการระบุเส้นทาง เส้นทางสัมพัทธ์ในไดเร็กทอรีปัจจุบัน เส้นทางสัมพัทธ์ในดิสก์การทำงานปัจจุบัน และเส้นทางสัมบูรณ์ ยกตัวอย่าง C:TmpBook (สมมติว่าไดเร็กทอรีการทำงานปัจจุบันคือ C:Tmp) "Book", "TmpBook", "C:TmpBook" ทั้งหมดหมายถึง C:TmpBook
นอกจากนี้ "" ยังเป็นอักขระพิเศษในภาษา C# และคุณต้องใช้ "\" เพื่อแสดง เนื่องจากวิธีการเขียนนี้ไม่สะดวก ภาษา C# จึงให้ @ เพื่อทำให้ง่ายขึ้น เพียงเพิ่ม @ หน้าสตริงเพื่อใช้ "" โดยตรง ดังนั้นพาธด้านบนควรแสดงเป็น "Book", @"TmpBook", @"C:TmpBook" ใน C#