2010-07-13 31 views
5

के साथ हटाने योग्य मीडिया प्रारूप मैं सी # प्रोग्रामिंग के साथ हटाने योग्य ड्राइव (FAT32) को प्रारूपित करना चाहता हूं। इंटरनेट में मुझे एक रास्ता मिला, लेकिन समस्या यह है कि यह जेनेरिक विंडोज प्रारूप प्रोग्राम खोलता है। लेकिन मैं इसे केवल सी # के साथ करना चाहता हूं और विंडोज़ समर्थन में निर्मित नहीं हूं।सी # प्रोग्रामिंग

मेरे विधि है:

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

तो मुझे लगता है कि आप कैसे यह अपने आप को लागू करने के लिए सीखने के लिए की आवश्यकता होगी। –

+5

इसे स्वयं मत लिखो। आप नहीं जानते कि कैसे। यदि आप यहां इस प्रश्न से पूछ रहे हैं, तो आप _definitely_ कैसे नहीं जानते हैं। और यह तथ्य कि आप इस चिल्लाहट को फिर से लागू करने के लिए भी लुभाने के लिए प्रेरित हैं कि आपके पास वास्तव में ऐसा करने का कोई अच्छा कारण नहीं है, और जो भी आप करते हैं वह खराब, टूटा और गलत होगा। –

उत्तर

4

आप wmi उपयोग कर सकते हैं, वहाँ एक तरीका है कि यह अनुमति देते हैं।

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

+0

हालांकि यह सी # भाषा में कुछ नहीं है। यह .NET CLR है और मुझे विंडोज के लिए विशिष्ट संदेह है। लेकिन अगर सभी राफयण एक प्रबंधित कॉल चाहते हैं, तो यह एक समाधान है (संसाधन को भारी हालांकि कॉलिंग के बजाए डब्लूएमआई को कॉल करना)। – tjmoore

1

मैं नहीं मानता कि सी # में कुछ भी है कि सामान्य रूप से ड्राइव करते जाएगा स्वरूपण, किसी भी प्रारूप की है। आपके पास जिस तरीके से विंडोज़ पर ऐसा करने का सबसे अच्छा तरीका है।

यदि आप इसे वास्तव में सामान्य चाहते हैं तो आपको अभी भी नौकरी करने के लिए हार्डवेयर तक पहुंच प्राप्त करने के कुछ प्लेटफ़ॉर्म विशिष्ट विधि की आवश्यकता होगी। सी # केवल आपको मानक I/O कार्यक्षमता प्रदान करने जा रहा है।

आप तीसरे पक्ष के पुस्तकालयों की तलाश कर सकते हैं जो क्रॉस-प्लेटफ़ॉर्म हैं यदि वास्तव में यह है कि आप वास्तव में क्या कर रहे हैं। संभावना है कि आप जिस समाधान को अन्य प्लेटफॉर्म पर काम कर सकते हैं (उदा। मोनो), हालांकि मुझे उनके बारे में बहुत कुछ पता नहीं है।

0

SHFormatDriveDeviceIoCtl नामक एपीआई के लिए एक उच्च स्तरीय रैपर है, जिसका उपयोग प्रारूप ड्राइव जैसे चीजों को करने के लिए ड्राइवर स्तर पर किया जाता है। आप संवाद को बाईपास करने में सक्षम नहीं होंगे, क्योंकि यह स्पष्ट रूप से एक शैल विधि के रूप में डिज़ाइन किया गया है जिसमें एक जीयूआई शामिल है।

मुझे नहीं पता कि वास्तव में पी/invoke'ng DeviceIoCtl के बाहर क्या आप यहां उपयोग कर सकते हैं। मार्क रसेलिनोविच (SysInternals प्रसिद्धि के) में "FormatX" नामक एक उपयोगिता होती थी जो एनटी 4 पर करेगी जो डिवाइस IOCTL बाद के संस्करणों पर करता है, लेकिन ऐसा लगता है कि यह डिकॉन्टीन्यूड, स्रोत और सब कुछ है। मुझे लगता है कि आपकी दूसरी सबसे अच्छी शर्त एक अलग कमांड खोल प्रक्रिया बनाना है जो सही पैरामीटर के साथ format उपयोगिता को कॉल करता है। एक विचार प्राप्त करने के लिए बस एक कंसोल खोलें और format /? टाइप करें। आप निश्चित रूप से कमांड दुभाषिया (cmd.exe /c के साथ) करने के लिए सिस्टम का उपयोग कर सकते हैं। डायग्नोस्टिक्स। प्रोसेस

0

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 }); 
संबंधित मुद्दे