본문 바로가기
개발 이야기/C# 이야기

C# .Net OpenFileDialog 여러파일선택

by 런던살자 2020. 3. 7.

안녕하세요 마블랑입니다.

 

프로그래밍을 할때 해당 프로그램이 다른 파일과 연동되는 경우가 많습니다.

 

게다가 이 파일을 선택하는것은 프로그래머가 아닌 사용자라면 파일 경로를 직접 사용자의 입력으로 받아야하는데요

 

C# 또는 .Net에서는 그것을 아주 쉽게 구현할수 있습니다.

 

 

C# 프로젝트를 생성하고 디자인화면에서 도구창을 보면 "OpenFileDialog" 클래스가 있습니다.

 

바로 이클래스를 활용해보겠습니다.

바로 디자인 화면에서 드래그해서 사용할수 있지만 이번에는 직접 코딩을 해보도록 하겠습니다.

 

드래그해서 사용하는경우 속성창에서 해당 OpenFileDialog의 속성을 설정해주면 됩니다.

코딩은 다음과 같습니다.

 

약간의 주석을 달아두었는데 표시가 안되는 부분은 따로 설명하겠습니다.

using System;
using System.Windows.Forms;

namespace CSharp_WindowsForms_Openfiledialog_Sample
{
    public partial class Form1 : Form
    {
        OpenFileDialog opendialog = new OpenFileDialog();
        public Form1()
        {
            InitializeComponent();
        }

        private void Bt_open_Click(object sender, EventArgs e)
        {
            string OpenFilePath = System.Environment.CurrentDirectory;

            opendialog.InitialDirectory = OpenFilePath;         //초기경로
            opendialog.RestoreDirectory = true;                 //현재 경로가 이전 경로로 복원되는지 여부          

            opendialog.Title = "파일 선택";

            opendialog.DefaultExt = "*";

            opendialog.FileName = ""; //기본값 파일명

            opendialog.Filter = "실행파일 (*.exe) | *.exe;";
            opendialog.Filter += "|이미지 (*.jpg, *.gif, *.png) | *.jpg; *.gif; *.png;";
            opendialog.Filter += "|음악 (*.mp3) | *.mp3;";
            opendialog.Filter += "|동영상 (*.avi, *.mp4, *.wmv) | *.avi; *.mp4; *.wmv;";
            opendialog.Filter += "|모든 파일 (*.*) | *.*";

            
            opendialog.Multiselect = true;                      //여러파일선택
            opendialog.ReadOnlyChecked = true;                  //읽기전용으로 열것인지체크
            opendialog.ShowReadOnly = true;                     //읽기전용파일 보이기 

            DialogResult dr = opendialog.ShowDialog();
            if (dr == DialogResult.OK)
            {
                foreach (String filepath in opendialog.FileNames)
                {
                    list_file.Items.Add(filepath.ToString());

                }
            }
            return;
        }
    }
}

OpenFileDialog를 사용할때 Filter부분을 사용하여 원하는 파일 확장자를 선택할수 있습니다.

 

위 코드는 총 5개의 파일 종류를 선택할수있는데요 구분은 ' | ' (or)로 하면 됩니다

 

목록에 보일 텍스트1 | 확장자1; | 목록에 보일 텍스트2 | 확장자2; | 목록에 보일 텍스트3 | ....

 

이런식으로 추가해주면 될것같습니다.

 

마블랑은 구분하기 쉽도록 라인별로 구현해 두었습니다.

 

확장자 뒤에 세미콜론( ; )도 잊지 마시기 바랍니다.

 

 

또한 Multiselect를 true로 하면 여러개의 파일을 선택할 수 있습니다. 

 

여러개의 파일을 선택했으니 OpenFileDialog.FileNames를 이용하여 경로를 호출해야합니다.

 

 

그럼 프로세스를 실행해보도록 하겠습니다.

 

샘플이라 별다른 디자인은 없습니다.

버튼을 누르면 아래와 같은 화면이 보입니다.

 

기본폴더는 위 코드를 보면 알겠지만 현재 실행파일이 있는경로입니다. 

 

처음 필터인 exe 확장자를 가진 파일만 표시되는 군요

이것을 이미지로 바꾸니 이미지 파일이 표시됩니다. 

 

필터에 PNG파일을 목록에 넣어두어서 PNG파일이 표시가 되는데요 

 

필터에 있지 않은 확장자는 표시가 되니 않으니 유의하기시 바랍니다.

열기를 누르면 아래와 같이 경로와 파일명을 불러옵니다.

 

여러 파일을 선택하게 해두었으므로 3개파일 모두 출력 됩니다. 

파일목록을 불러오는 부분은 위 코드를 참고하시기 바랍니다.

 

 

이상 마블랑이었습니다.

 

읽어주어서 고맙습니다.

댓글