บันทึกพาธ และ Copy ไฟล์รูปภาพจาก OpenFileDialog


 

บทความนี้เป็นตัวอย่างเล็กๆ สำหรับการใช้งาน OpenFileDialog คอนโทรล และการดึงค่าต่างๆ ไปใช้งาน เช่น การบันทึกพาธไฟล์ และการ copy ไฟล์ไปไว้ในโฟลเดอร์ที่เราต้องการ เป็นลักษณะการเก็บพาธไว้ในฐานข้อมูล ส่วนรูปภาพจะเก็บไว้ในโฟลเดอร์ที่เรากำหนดไว้ เช่นไว้ภายใต้ root ของโฟลเดอร์ย่อยที่โปรแกรม (exe) รันอยู่ไปดูวิธีกันเลย

นี่คือหน้าจอโปรแกรมเมื่อเลือกรูปภาพจากการกดปุ่ม Brows…

0 

 

การรันโปรแกรม

1. กดปุ่ม Brows… => เลือกรูปภาพที่ต้องการ

1 2

 

2. เมื่อคลิกปุ่มม Open จากข้อ 1 รูปจะแสดงบน pictureBox1 => กดปุ่ม Save เพื่อทำดารบันทึก และ copy ไฟล์ไปไว้ในที่ที่เราได้กำหนดไว้ (ตัวอย่างนี้ไม่ได้กล่าวถึงโค้ดในส่วนบันทึกพาธลงฐานข้อมูล ท่านผู้อ่านลองไปต่อยอดเอานะครับ)

3 4

 

3. ถ้าเราเข้าไปดูในพาธที่โปรแกรมของเรารันอยู่จะเห็นว่ามีการสร้างโฟลเดอร์ Picture รอไว้หนึ่งอันซึ่งไว้สำหรับการ copy รูปไปเก็บไว้นั่นเอง และพาธอันนี้แหละที่เราจะเก็บมันไว้ในฐานข้อมูล เพื่อว่าเมื่อย้อนกลับมาดู้ข้อมูล โปรแกรมจะได้จำได้ว่ารูปถูกเก็บไว้ที่ใหน

 6

ไปดูโค้ดกันครับ

 

โค้ดบางส่วน

       //ที่ปุ่ม Brows
        private void btBrows_Click(object sender, EventArgs e)
        {
            OpenFileDialog opfd = new OpenFileDialog();
            opfd.Filter = "JPEG (*.jpg)|*.jpg|Windows bitmap (*.bmp)|*.bmp|All files|*.*" ;
            opfd.InitialDirectory = "C:\";
            opfd.Title = "Select a picture";
            if (opfd.ShowDialog() == DialogResult.OK)
            {
                filenname = System.IO.Path.GetFileName(opfd.FileName);//ดึงเฉพาะชื่อไฟล์ไปเก็บชั่วคราวในตัวแปร filenname
                path = System.IO.Path.GetDirectoryName(opfd.FileName);//ดึงเฉพาะพาธไฟล์ไปเก็บชั่วคราวในตัวแปร path


                txtPart.Text = opfd.FileName;
                this.pictureBox1.Image = new Bitmap(opfd.FileName.ToString());

            }

        }

    //โค้ดที่ปุ่ม บันทึก
        private void btSave_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("คุณต้องการบันทึกข้อมูล ใช่หรือไม่?", "คำยืนยัน", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                try
                {
                    string sourceFile = path + "\" + filenname;
                    //ดึงพาธปัจจุบันที่โปรแกรม exe รันอยู่ ไปต่อด้วยชื่อโฟลเดอร์ Picture เพื่อเก็บภาพ และพาธเป็นปลายทาง
                    string pathPicture = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\Picture";

                    //destFile ไฟล์ปลายทาง ที่จะ copy ไปวาง ได้แก่ พาธปลายทาง และชื่อไฟล์
                    string destFile = pathPicture + "\" + filenname;

                    //ทำกการตรวจสอบ พาธเป็นปลายทาง
                    if (!Directory.Exists(pathPicture))
                        Directory.CreateDirectory(pathPicture);//ถ้ายังไม่เคยมีในโลก ให้สร้างใหม่

                    //ทำการตรวจสอบ ไฟล์ปลายทาง
                    if (!File.Exists(destFile))
                        File.Copy(sourceFile, destFile);//ถ้ายังไม่มีให้ copy ไปได้ 
                                                        //หรือใช้ File.Copy(sourceFile, destFile,true)จะ copy ทับของเก่า

                    //วางโค้ดบันทึก ข้อมูลลงฐานข้อมูล
                    //ลงที่นี่: โดย
                    // นำพาธในตัวแปร pathPicture
                    // นำชื่อไฟล์ในตัวแปร filenname
                    // ไปบันทึกลงฐานข้อมูล
                    //#หมายเหตุ ข้อควรระวัง#
                    //
                    // โปรแกรมนี้เหมาะสำหรับการใช้ของผู้ใช้งานคนเดียว
                    // ไม่เหมาะสำหรับการใช้งานหลายๆ เครื่องๆ เนื่องจากพาธที่เก็บใน Server กระจายตามเครื่อง Client 
                    // ทำให้มีปัญหาเครื่องอื่นจะเปิดพาธไฟล์และชื่อไฟล์ ที่บันทึกจากเครื่องของเราไม่ได้
                    ////////////////////////

                    MessageBox.Show("บันทึกข้อมูลเรียบร้อย", "ผลการบันทุกข้อมูล", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    clearObject();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show("เกิดข้อผิดพลาด"+Environment.NewLine+"Error "+ex.Message , "ผลการบันทุกข้อมูล", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }



            }
        }

 

แหล่งข้อมูลดาวน์โหลด
http://cid-7d608959d854cb28.skydrive.live.com/embedrowdetail.aspx/SourcesCode/WindowsFormsApplication|_OpenFileDialog.zip

 

ผู้เขียน
Columnist

เกี่ยวกับ

Nuchit Atjanawat is a Microsoft MVP, GreatFriends Community Leader, WindowsITPro Columnist(Mr.Nano), Silverlight Business Application Instructor, Speaker in various Microsoft events, Author, passionate Blogger and a Software Engineer by profession. He has a very good skill over Silverlight, LightSwitch, C#, XAML & Blend. He shares his technical findings, tutorials in his technical blog. Follow his Blog and Facebook page to be updated on latest articles. - Technical Blog: https://janawat.wordpress.com - WindowsITPro Columnist(Mr.Nano): http://windowsitpro.net - The GreatFriends.Biz Community Discussion Board (nano): http://greatfriends.biz - witter: https://twitter.com/janawat - Facebook Page: https://www.facebook.com/nuchit - Instructor: http://bit.ly/GF250-01, http://bit.ly/GF150-02

เขียนใน Windows Application
3 comments on “บันทึกพาธ และ Copy ไฟล์รูปภาพจาก OpenFileDialog
  1. Chii พูดว่า:

    ไฟล์นี้ไม่สามารถโหลดได้แล้วหรอคะ คือต้องการนำมาดูเป็นตัวอย่างอ่ะค่ะ แล้วโค้ดที่พี่ใส่ไว้บางส่วนมันไม่ขึ้น รบกวนส่งไฟล์ที่พี่อัพไว้ให้หน่อยได้ไหมคะ Chiijungz@gmail.com

  2. janawat พูดว่า:

    คุณ Chii…
    โหลด Source ได้ที่นี่ครับ:
    http://sdrv.ms/17HizvP

  3. bo พูดว่า:

    สอบถามวิธีการเรียก มาแสดงใน picturebox หน่อยครับ ผมจะทำการ Edit
    ผมเก็บ destFile ลง database เลยครับ ทัปัญหาตอนเรียกมาโชว์

    this.txtimg.Text = dt.Rows[0][“image”].ToString(); //อยู่ใน onload form

    this.imgCus.Image = new Bitmap(@”img”); //error
    this.imgCus.Image = new Bitmap(@”C:\Users\Administrator\Documents\Visual Studio 2013\Projects\test01\test01\bin\Debug\Picture\Koala.jpg”); //no error

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

In Archive
%d bloggers like this: