Lập trình C#

Thao tác với đường dẫn Path và DriveInfo trong C#

Thao tác với đường dẫn Path và DriveInfo trong C#
Được viết bởi Minh Hoàng

Series lập trình C#, ngôn ngữ lập trình hiện đại và mạnh mẽ.

Trong bài viết này, chúng ta sẽ cùng tìm hiểu về 2 class PathDriveInfo trong C#.
Nội dung chính:

  1. Class Path
  2. Class DriveInfo
#1/2. Làm việc với đường dẫn Path

– Class Path cung cấp toàn bộ là phương thức và thuộc tính static để thao tác với đường dẫn trong C#.

– Các phương thức của class Path:

Method / Property Mô tả
ChangeExtension() Thay đổi the extension của một path string.
Combine() Kết hợp một chuỗi các chuỗi thành một đường dẫn.
GetDirectoryName() Trả về thông tin thư mục cho chuỗi đường dẫn đã chỉ định.
GetExtension() Trả về phần mở rộng của chuỗi đường dẫn đã chỉ định.
GetFileName() Trả về tên file có phần mở rộng của chuỗi đường dẫn đã chỉ định.
GetFileNameWithoutExtension() Trả về tên file không có phần mở rộng của chuỗi đường dẫn đã chỉ định.
GetFullPath() Trả về đường dẫn tuyệt đối cho chuỗi đường dẫn đã chỉ định.
GetInvalidFileNameChars() Trả về một mảng chứa các ký tự không được phép trong tên file.
GetInvalidPathChars() Trả về một mảng chứa các ký tự không được phép trong path.
GetPathRoot() Lấy thông tin thư mục gốc (root directory) của đường dẫn đã chỉ định.
GetRandomFileName() Trả về ngẫu nhiên tên folder hoặc tên file.
GetTempFileName() Tạo một file tạm thời có uniquely named (được đặt tên duy nhất trên ổ đĩa) và trả về đường dẫn đầy đủ của file tạm thời đó.
GetTempPath() Trả về đường dẫn của thư mục tạm thời “Temp” của người dùng hiện tại.
HasExtension() Xác định xem một path có bao gồm phần mở rộng của file hay không.
IsPathRooted() Nhận một giá trị cho biết chuỗi đường dẫn đã chỉ định có chứa root hay không.

– Các thuộc tính của class Path:

  • AltDirectorySeparatorChar
  • DirectorySeparatorChar
  • InvalidPathChars
  • PathSeparator
  • VolumeSeparatorChar

– Demo:

using System;
using System.IO;

namespace MinhHoangBlog
{
	class Program
	{
		static void Main(string[] args)
		{
			string goodFileName = @"D:\MinhHoangBlog\minhhn.com\myFile.txt";
			string badFileName = @"D:\MinhHoangBlog\minhhn.com\";
			string result;

			result = Path.ChangeExtension(goodFileName, ".old");
			// output "D:\MinhHoangBlog\minhhn.com\myFile.old"

			result = Path.ChangeExtension(goodFileName, "");
			// output "D:\MinhHoangBlog\minhhn.com\myFile."

			result = Path.ChangeExtension(badFileName, ".old");
			// output "D:\MinhHoangBlog\minhhn.com\.old"

			result = Path.GetDirectoryName(goodFileName);
			// output "D:\\MinhHoangBlog\\minhhn.com"

			result = Path.GetExtension(goodFileName);
			// output ".txt"

			result = Path.GetFileName(goodFileName);
			// output "myFile.txt"

			result = Path.GetFileNameWithoutExtension(goodFileName);
			// output "myFile"

			result = Path.GetFullPath(goodFileName);
			// output "D:\\MinhHoangBlog\\minhhn.com\\myFile.txt"

			result = Path.GetPathRoot(goodFileName);
			// output "D:\\"

			result = Path.GetTempFileName();
			// output "C:\\Users\\pc\\AppData\\Local\\Temp\\tmpE185.tmp"

			result = Path.GetTempPath();
			// output "C:\\Users\\pc\\AppData\\Local\\Temp\\"

			string fileName = @"C:\mydir\myfile.ext";
			string uncPath = @"\\myPc\mydir\myfile";
			string relativePath = @"mydir\sudir\";
			bool isFlg;

			isFlg = Path.HasExtension(fileName);
			// output "true"

			isFlg = Path.HasExtension(uncPath);
			// output "false"

			isFlg = Path.IsPathRooted(fileName);
			// output "true"

			isFlg = Path.IsPathRooted(uncPath);
			// output "true"

			isFlg = Path.IsPathRooted(relativePath);
			// output "false"

			// Get current working directory (..\bin\Debug)
			string workingDirectory = Environment.CurrentDirectory;

			// Get the current PROJECT directory
			string projectDirectory = Directory.GetParent(workingDirectory).Parent.FullName;

			// Create specific path file
			string csvPath = string.Format(@"{0}\CsvFile\Sample.csv", projectDirectory);

			// Remove the last character if it's DirectorySeparatorChar
			result = badFileName.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
			// badFileName "D:\\MinhHoangBlog\\minhhn.com\\"
			// output "D:\\MinhHoangBlog\\minhhn.com"

			Console.ReadKey();
		}
	}
}

– Ngoài ra còn có các cách lấy application folder path:

  • Application.StartupPath
  • System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)
  • AppDomain.CurrentDomain.BaseDirectory (★)
  • System.IO.Directory.GetCurrentDirectory()
  • Environment.CurrentDirectory
  • System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
  • System.IO.Path.GetDirectory(Application.ExecutablePath)
Đối với web application:
  • HttpContext.Current.Server.MapPath();
  • System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;
#2/2. Làm việc với DriveInfo

– Class DriveInfo cung cấp các phương thức và thuộc tính truy cập thông tin của ổ cứng và CD-Rom.

– Các phương thức và thuộc tính của class DriveInfo:

Method / Property Mô tả
GetDrives() Trả về là một mảng DriveInfo[], là tên ổ đĩa của tất cả các ổ đĩa logic trên máy tính.
AvailableFreeSpace Cho biết lượng không gian trống có sẵn trên một ổ đĩa, tính bằng byte.
DriveFormat Lấy tên của hệ thống file, chẳng hạn như NTFS hoặc FAT32.
DriveType Lấy loại ổ đĩa như là CD-ROM, loại có thể tháo rời, network hay cố định.
IsReady Trả về true nếu ổ đĩa đã sẵn sàng, false nếu ổ đĩa chưa sẵn sàng.
Name Lấy tên của ổ đĩa, chẳng hạn như: C:\
RootDirectory Lấy thư mục gốc (root directory) của một ổ đĩa.
TotalFreeSpace Lấy tổng số dung lượng trống có sẵn trên một ổ đĩa, tính bằng byte.
TotalSize Lấy tổng kích thước của không gian lưu trữ trên một ổ đĩa, tính bằng byte.
VolumeLabel Get / Set FileAttribution nhãn cho ổ đĩa, như C, D, E,…

Có thể bạn quan tâm: Thao tác với tập tin và thư mục trong C#.

Cảm ơn bạn đã theo dõi. Đừng ngần ngại hãy cùng thảo luận với chúng tôi!

Giới thiệu

Minh Hoàng

Xin chào, tôi là Hoàng Ngọc Minh, hiện đang làm BrSE, tại công ty Toyota, Nhật Bản. Những gì tôi viết trên blog này là những trải nghiệm thực tế tôi đã đúc rút ra được trong cuộc sống, quá trình học tập và làm việc. Các bài viết được biên tập một cách chi tiết, linh hoạt để giúp bạn đọc có thể tiếp cận một cách dễ dàng nhất. Hi vọng nó sẽ có ích hoặc mang lại một góc nhìn khác cho bạn[...]

Translate »