ایجاد درایو بر روی هارد دیسک توسط #C

یکشنبه 13 اردیبهشت 1394

در این مقاله نحوه ایجاد پارتیشن بر روی هارد دیسک توسط دستورات #C را شرح خواهیم داد

برای ایجاد پارتیشن بر روی هارد دیسک , ما از Diskpart.exe  که از نرم افزار های اجرایی تحت ویندوز می باشد .این نرم افزار در ویندوز 7 اجرا می شود .

DiskPart :

Diskpart.exe  یک دستور متنی میباشد که ما را قادر به مدیریت اشیاء (مانند پارتیشن ها) با استفاده اسکریپت و یا دستورات مستقیم از Command Prompt دریافت شده می کنند .

قبل از این که شما بتوانید از دستور DiskPart.exe بر روی دیسک و یا پارتیشن استفاده کنید , شما باید ابتدا شئی ها را به صورت لیست مرتب کنید , سپس بر روی آنها تمرکز(focus) کنید .DiskPart از تعدادی خط دستور متفاوت دریافت میشود جرا که از یک خط عمل نمی کند .در عوض بعد از اجرای برنامه دستورات به عنوان دستورات استاندارد I/o خوانده میشود .شما می توانید این دستورات را بر روی هر پارتیشن,درایو یا فضای دیگر مدیریت کنید .

مثال

در ویژوال استودیو یک پروژه console application ایجاد میکنیم .ما یک فایل اسکریپت ایجاد میکنیم و سپس آنرا اجرا میکنیم .برنامه را با استفاده از دستورات #C در محیط Command Prompt اجرا میکنیم .در این مثال ما تمام درایو های موجود در ویندوز را بررسی میکنیم . این درایوهای آماده برای این بررسی میشوند که نام درایو جدیدی که ایجاد می کنیم , تکراری نباشد .

تابعی با نام "Main" برای تعیین حجم درایوی که می خواهیم ایجاد کنیم فرا خوانی می کنیم که این تابع حجم درایو را ابتدا از کاربر دریافت میکند , سپس درایو را ایجاد می کند .دستور ()CreatePartition پارتیشن با حجم مشخص را ایجار می کند .


    static void Main()   
    {  
        try   
        {  
            Console.WriteLine("Enter Partition size in GB");  
            int partitionSize = Convert.ToInt16(Console.ReadLine());  
            //Call to function which will create partition.    
            CreatePartition(partitionSize);  
      
            Console.WriteLine("Formate completed");  
        }   
        catch (Exception ex)  
        {  
            Console.WriteLine(ex.Message);  
        }  
        Console.ReadKey();  
    }  

CreatingPartition

در ادامه به شیوه و عملکرد تابع CreatePartition اشاره میکنیم :

1 - تمام اطلاعات درایو های موجود در سیستم را دریافت میکند .

2 - اطلاعات مربوط به هارد دیسک را بررسی میکند .

3 - نام پارتیشن جدیدی که میخواهیم ایجاد کنیم را دریافت میکند .

4 - دستورات مزبوط به ایجاد پارتیشن را بررسی میکند که اگر از قبل وجود داشت , آنرا حذف میکند تا دستور جدید OverLoad نشود

5 -دستورات را به فایل اسکریپت اضافه میکند .

6 - با استفاده از این روند Command Prompt را اجرا میکند .

7 - دستورات را در Command Prompt اجرا می کند .

8 - فایل اسکریپت را حذف می کند .


    /// <summary>    
    /// Creates partition on hard disk    
    /// </summary>    
    /// <param name="partitionSizeInGB">partition size</param>    
    /// <returns></returns>    
    private static int CreatePartition(int partitionSizeInGB)   
    {  
        string sd = string.Empty;  
        int result = 0;  
      
        //Get all drives includes CD drive and network drive.    
        List < DriveInfo > allDrivesInfo = DriveInfo.GetDrives().Where(x = > x.DriveType != DriveType.Network).OrderBy(c = > c.Name).ToList();  
      
        // get new drive name based on existing drives.    
        char newDriveName = allDrivesInfo.LastOrDefault().Name.FirstOrDefault();  
        newDriveName = (Char)(Convert.ToUInt16(newDriveName) + 1);  
      
        // Get Hard drive information    
        List < DriveInfo > allFixDrives = DriveInfo.GetDrives().Where(c = > c.DriveType == DriveType.Fixed).ToList();  
      
        try   
        {  
            string scriptFilePath = System.IO.Path.GetTempPath() + @  
            "\dpScript.txt";  
            string driveName = allFixDrives.FirstOrDefault().Name;  
      
            if (File.Exists(scriptFilePath))   
            {  
                // Note: if the file doesn't exist, no exception is thrown    
                File.Delete(scriptFilePath); // Delete the script, if it exists    
            }  
      
            // Create the script to resize F and make U    
            File.AppendAllText(scriptFilePath,  
            string.Format(  
                "SELECT DISK=0\n" + // Select the first disk drive    
            "SELECT VOLUME={0}\n" + // Select the drive    
            "SHRINK DESIRED={1} MINIMUM={1}\n" + // Shrink to half the original size    
            "CREATE PARTITION PRIMARY\n" + // Make the drive partition    
            "ASSIGN LETTER={2}\n" + // Assign it's letter    
            "FORMAT FS=FAT32 QUICK\n" + // Format it    
            "EXIT", driveName, partitionSizeInGB * 1000, newDriveName)); // And exit    
            int exitcode = 0;  
            string resultSen = ExecuteCmdCommand("DiskPart.exe" + " /s " + scriptFilePath, ref exitcode);  
            File.Delete(scriptFilePath); // Delete the script file    
            if (exitcode > 0)   
            {  
                result = exitcode;  
            }  
      
            return result;  
        }  
        catch (Exception ex)   
        {  
            throw ex;  
        }  
    }   

 اجرای دستور CmdCommand

ما command Prompt را اجرا می کنیم , سپس اسکریپت را در یک process جدا در #C اجرا میکنیم .

/// <summary>  
/// cmd command execution method  
/// </summary>  
/// <param name="Command">Command</param>  
/// <param name="Timeout">Timeout period</param>  
/// <returns></returns>  
private static string ExecuteCmdCommand(string Command, ref int ExitCode)  
{  
    ProcessStartInfo ProcessInfo;  
    Process Process = new Process();  
    string myString = string.Empty;  
    ProcessInfo = new ProcessStartInfo("cmd.exe", "/C " + Command);  
  
    ProcessInfo.CreateNoWindow = false;  
    ProcessInfo.WindowStyle = ProcessWindowStyle.Normal;  
    ProcessInfo.UseShellExecute = false;  
    ProcessInfo.RedirectStandardOutput = true;  
    Process.StartInfo = ProcessInfo;  
    Process = Process.Start(ProcessInfo);  
    StreamReader myStreamReader = Process.StandardOutput;  
    myString = myStreamReader.ReadToEnd();  
      
    ExitCode = Process.ExitCode;  
    Process.Close();  
      
    return myString;  
} 

 

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 1k بازدید
  • 0 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

تاکنون هیچ کاربری از این پست تشکر نکرده است

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید