2010-07-13 21 views
5

Tôi muốn định dạng ổ đĩa rời (FAT32) có lập trình C#. Trong internet tôi tìm thấy một cách, nhưng vấn đề là nó sẽ mở chương trình định dạng cửa sổ chung. Nhưng tôi muốn làm điều đó với C# chỉ và không có hỗ trợ windows.Định dạng Phương tiện lưu động với lập trình C#

phương pháp của tôi là:

// FAT32 Format Button click event 
[DllImport("shell32.dll")] 
static extern uint SHFormatDrive(IntPtr hwnd, uint drive, uint fmtID, uint options); 
+0

Sau đó, tôi đoán bạn sẽ cần phải học cách để thực hiện điều đó cho mình. –

+5

Đừng tự viết nó. Bạn không biết làm thế nào. Nếu bạn đang đặt câu hỏi này ở đây, bạn _definitely_ không biết làm thế nào. Và thực tế là bạn thậm chí còn bị cám dỗ để reimplement này screams rằng bạn thực sự không có một lý do tốt để làm điều đó, và bất cứ điều gì bạn làm sẽ là xấu, bị hỏng, và sai. –

Trả lời

4

Bạn có thể sử dụng wmi, có một phương pháp cho phép này.

http://msdn.microsoft.com/en-us/library/aa390432%28v=VS.85%29.aspx

+0

Mặc dù đó không phải là ngôn ngữ C#. Đó là NET CLR và tôi nghi ngờ cụ thể cho Windows. Nhưng nếu tất cả Rafayan muốn là một cuộc gọi được quản lý, thì đó là một giải pháp (tài nguyên nặng mặc dù gọi WMI thay vì chỉ gọi một interop). – tjmoore

1

Tôi không tin rằng có bất cứ điều gì trong C# sẽ quát làm ổ định dạng, định dạng bất kỳ. Phương pháp bạn có là cách tốt nhất để làm điều đó trên Windows.

Nếu bạn muốn nó thực sự chung chung bạn vẫn sẽ cần một số phương pháp cụ thể nền tảng để truy cập vào phần cứng để thực hiện công việc. C# sẽ chỉ cung cấp cho bạn chức năng I/O tiêu chuẩn.

Bạn có thể tìm kiếm thư viện của bên thứ ba là nền tảng chéo nếu đó thực sự là những gì bạn đang theo dõi. Rất có thể là giải pháp bạn có thể làm việc trên các nền tảng khác (ví dụ: mono), mặc dù tôi không biết nhiều về chúng.

0

SHFormatDrive là trình bao bọc cấp cao cho API được gọi là DeviceIoCtl, được sử dụng ở cấp trình điều khiển để thực hiện những việc như định dạng ổ đĩa. Bạn sẽ không thể bỏ qua hộp thoại, vì nó rõ ràng được thiết kế như một phương thức vỏ kết hợp GUI.

Tôi không biết những gì bên ngoài thực sự p/invoke'ng DeviceIoCtl bạn có thể sử dụng tại đây. Mark Russinovich (nổi tiếng của SysInternals) đã từng sử dụng một tiện ích có tên là "FormatX" có thể thực hiện trên NT4 những gì DeviceIOCtl thực hiện trên các phiên bản sau này, nhưng điều đó dường như đã bị gián đoạn, nguồn và tất cả. Tôi nghĩ rằng đặt cược tốt nhất khác của bạn là tạo ra một quá trình vỏ lệnh riêng biệt gọi các tiện ích format với các thông số chính xác. Chỉ cần mở một bảng điều khiển và nhập format /? để có ý tưởng. Tất nhiên bạn có thể sử dụng System.Diagnostics.Process để thực hiện việc này với trình thông dịch lệnh (với cmd.exe /c).

0

Làm việc khá tốt thông qua WMI:

var query = String.Format("SELECT * FROM Win32_Volume WHERE Name = '{0}'", "E:\\\\"); 
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", query); 
var queryCollection = from ManagementObject x in searcher.Get() select x; 
var volume = queryCollection.FirstOrDefault(); 

var resultCode = volume.InvokeMethod("Format", new object[] { "FAT32", true, 4096, "Volume Name", false }); 
Các vấn đề liên quan