본문 바로가기

Programing (프로그래밍)/WPF & C# (C Sharp)

WPF C# - 함수 - GetDropFiles 드래그앤드랍 파일 가져오기 (drag&drop)

728x90
반응형

SimpleLayer.zip
0.04MB
SimpleLayer.exe
0.01MB

 

private void Grid_Drop(object sender, DragEventArgs e)
{
    List<string> lstFile = GetDropFilesPaths(e);
    lbl.Content = "";
    foreach (string s in lstFile)
    {
        lbl.Content += s + "\n";
    }
}
/// <summary>
/// GetDropFilesPaths 드랍파일 가져오기
/// </summary>
/// <param name="e">DropData</param>
/// <returns>DropFiles</returns>
private List<string> GetDropFilesPaths(DragEventArgs e, bool deduplication = false)
{
    string[] eDataFiles = (string[])e.Data.GetData(DataFormats.FileDrop);
    List<string> lstFile = new List<string>();
    foreach (string eDataFile in eDataFiles)
    {
        try
        {
            // 폴더이면 하위폴더 파일가져오기
            if ((File.GetAttributes(eDataFile) & FileAttributes.Directory) == FileAttributes.Directory)
            {
                // var filesss = Directory.EnumerateFiles(eDataFile, "*.*", SearchOption.AllDirectories).Where(s => s.EndsWith(".jpg"));
                var filesss = Directory.EnumerateFiles(eDataFile, "*.*", SearchOption.AllDirectories);   // 하위폴더 포함
                lstFile.AddRange(filesss);
            }
            // 파일이면 파일가져오기
            else if ((File.GetAttributes(eDataFile) & FileAttributes.Directory) != FileAttributes.Directory)
            {
                lstFile.Add(eDataFile);
            }
        }
        catch
        {
            MessageBox.Show("가져오지 못한 파일 또는 폴더가 있습니다.");
            continue;
        }
    }
    // 중복데이터제거
    if (deduplication)
        lstFile.Distinct();
    return lstFile;
}

폴더나 파일을 Drag&Drop 했을때 하위 폴더의 폴더를 가져오는 함수

* AllowDrop="True" 로 주어야 Drag&Drop 이 된다.

 

참고 : https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/file-system/how-to-iterate-through-a-directory-tree

728x90
반응형