質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

2回答

9693閲覧

C#でフォルダのD&Dでファイル一覧取得

AMK

総合スコア765

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2015/06/29 04:27

編集2015/06/29 07:22

フォームのドラッグアンドドロップした場合にファイルはリストボックスに表示するように出来て、フォルダ名まではできるようになったのですがフォルダ内の全てのファイル名を取得する方法でハマっています。

参考になるサイトやコードなど有りましたらお助けください。

lang

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10 11namespace UTF_8NOBOM 12{ 13 public partial class Form1 : Form 14 { 15 public Form1() 16 { 17 InitializeComponent(); 18 //AllowDrop = trueでドロップを許可 19 this.AllowDrop = true; 20 this.DragDrop += new DragEventHandler(this.Form1_DragDrop); 21 this.DragEnter += new DragEventHandler(this.Form1_DragEnter); 22 } 23 24 private void Form1_Load(object sender, EventArgs e) 25 { 26 } 27 private void Form1_DragEnter(object sender, DragEventArgs e) 28 { 29 if (e.Data.GetDataPresent(DataFormats.FileDrop)) 30 { 31 32 // ドラッグ中のファイルやディレクトリの取得 33 34 string[] drags = (string[])e.Data.GetData(DataFormats.FileDrop); 35 36 foreach (string d in drags) 37 { 38 if (System.IO.File.Exists(drags[0]) == true) 39 { 40 // ファイル以外であればイベント・ハンドラを抜ける 41 return; 42 } 43 } 44 e.Effect = DragDropEffects.Copy; 45 } 46 } 47 private void Form1_DragDrop(object sender, DragEventArgs e) 48 { 49 // ドラッグ&ドロップされたファイル 50 string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false); 51 52 ListBox1.Items.AddRange(files); // リストボックスに表示 53 } 54 } 55} 56

追記
色々考えて現在わかっていること

lang

1 // ファイル以外であればイベント・ハンドラを抜ける 2 return;

上記コードの場所にフォルダから取得するコードを入れれば動く?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

フォルダのパスからは以下のファイルを取得したいということであればDirectory.GetFilesが使えます。
あるフォルダ以下にあるファイルをすべて取得する

投稿2015/06/29 05:30

sho_cs

総合スコア3541

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AMK

2015/06/29 07:09

ありがとうございます! 現在チャレンジしておりますがイマイチ動かないです^^;
sho_cs

2015/06/29 07:23

追記部分について File.Existsではフォルダの判定は行えないので、elseでDirectory.Existsを使い判定する必要があります。
AMK

2015/06/30 02:28

ありがとうございます! 試してみますね 引き続き一覧にするコード模索中です よろしくお願いします。
guest

0

ざっと書いてみました。ちゃんとチェックしてないので漏れがあるかもしれません。
サブフォルダのファイルも全部調べあげるという事でいいんですよね?

C#

1 private static IEnumerable<string> getAllFiles(IEnumerable<string> paths) 2 { 3 var list = new List<string>(); 4 foreach(var path in paths) 5 { 6 if (System.IO.File.Exists(path)) 7 list.Add(path); 8 else if (System.IO.Directory.Exists(path)) 9 list.AddRange(getChildFiles(path)); 10 } 11 return list; 12 } 13 14 private static IEnumerable<string> getChildFiles(string folderPath) 15 { 16 var folder = new System.IO.DirectoryInfo(folderPath); 17 var list = new List<string>(); 18 foreach (var subFolder in folder.GetDirectories()) 19 list.AddRange(getChildFiles(subFolder.FullName)); 20 foreach (var file in folder.GetFiles()) 21 list.Add(file.FullName); 22 return list; 23 } 24

■使い方

C#

1var allFiles = getAllFiles(files);

これで全ファイル取れると思います。

yield returnを使いたかったのですが再帰の都合上上手く出来ずListを使ってしまいました。
(誰かいい解決方法があったら教えて下さい)

投稿2015/08/12 22:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問