C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: フォルダ名の一覧が取得できない


(過去ログ 110 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■65483 / inTopicNo.1)  フォルダ名の一覧が取得できない
  
□投稿者/ mm (1回)-(2013/03/01(Fri) 11:46:44)

分類:[C#] 

C#でForderBrowserDialogにて取得したパスからそのパス内のフォルダ名一覧をコンボボックスのリストに追加しようとしております。
現状のコードではコンボボックスにフォルダ名ではなく、そのフォルダのパスが表示されてしまいます。
色々なサイトでDirectory.GetParentやPath.GetDirectoryNameを使った方法を調べ
実装してみましたが結果は同じでフォルダ名のみを取得する事ができませんでした。
エスケープシーケンスなどが関係してくるのでしょうか?どうかご指導お願い致します。

private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog fbd = new FolderBrowserDialog();
fbd.Description = "プロジェクトフォルダの作成場所を指定して下さい";
if (fbd.ShowDialog(this) == DialogResult.OK)
{
string [] Cdir = Directory.GetDirectories(fbd.SelectedPath);
        
        //コンボボックスに追加する用のArrayList
ArrayList Cdirn = new ArrayList();

foreach(string dirname in Cdir)
{
string Mypath =((Directory.GetParent(@dirname+"\\")).FullName);
//string Mypath = Path.GetDirectoryName(@dirname+"\\");

Cdirn.Add(Mypath);
}

foreach (string colist in Cdirn)
{
this.comboBox2.Items.Add(colist);
}

}
}}
引用返信 編集キー/
■65484 / inTopicNo.2)  Re[1]: フォルダ名の一覧が取得できない
□投稿者/ Hongliang (37回)-(2013/03/01(Fri) 12:09:08)
Path.GetFileNameを使用してください。
GetDirectoryNameは、そのパスのディレクトリ部分を取得するという意味で、パスがディレクトリを指していたとしても、「そのディレクトリが存在しているディレクトリ」部分という意味になります。
引用返信 編集キー/
■65485 / inTopicNo.3)  Re[1]: フォルダ名の一覧が取得できない
□投稿者/ 魔界の仮面弁士 (159回)-(2013/03/01(Fri) 12:29:12)
No65483 (mm さん) に返信
> C#でForderBrowserDialogにて
C# ではなく、C# ですね。 (Forder のスペルミスも気になりますが)

細かい事ですが、ISOおよびJIS規格において、プログラム言語C#は
LATIN CAPITAL LETTER "C" (U+0043) の次に NUMBER SIGN "#" (U+0023) を
書くことになっています。


> 色々なサイトでDirectory.GetParentやPath.GetDirectoryNameを使った方法を調べ
> 実装してみましたが結果は同じでフォルダ名のみを取得する事ができませんでした。

Path.GetFileName もしくは DirectoryInfo の Name プロパティを使ってみてください。


if (fbd.ShowDialog(this) == DialogResult.OK)
{
    comboBox2.DataSource = Directory.GetDirectories(fbd.SelectedPath).Select(s => Path.GetFileName(s)).ToArray();
}


> エスケープシーケンスなどが関係してくるのでしょうか?どうかご指導お願い致します。

「C:\Windows\..\Program Files\Sample.Folder」というパスを渡した場合

Path.GetDirectoryName             … C:\Windows\..\Program Files
Path.GetPathRoot                  … C:\
Path.GetFullPath                  … C:\Program Files\Sample.Folder
Path.GetExtension                 … .Folder
Path.GetFileName                  … Sample.Folder
Path.GetFileNameWithoutExtension  … Sample


「C:\Windows\..\Program Files\Sample.Folder\」というパスを渡した場合

Path.GetDirectoryName             … C:\Windows\..\Program Files\Sample.Folder
Path.GetPathRoot                  … C:\
Path.GetFullPath                  … C:\Program Files\Sample.Folder\
Path.GetExtension                 … 空文字列
Path.GetFileName                  … 空文字列
Path.GetFileNameWithoutExtension  … 空文字列

のように変換されます。これらのメソッドは、パス文字列の処理を行うだけの
ものであり、実際に存在するパスかどうかには言及されません。


> this.comboBox2.Items.Add(colist);
.Items.Add するのであれば、事前に .Items.Clear() しておかないと、
ボタンを再度押されたときに、フォルダ名が多重出力されてしまいますよ。

引用返信 編集キー/
■65486 / inTopicNo.4)  Re[2]: フォルダ名の一覧が取得できない
□投稿者/ mm (2回)-(2013/03/01(Fri) 13:29:50)
Hongliang様、魔界の仮面弁士様
ご回答ありがとうございます。
フォルダ名を取得したいと思っていたのでGetFileNameは使っていなかったのですが
この勘違いしている点もわかり非常に勉強になりした。
結果Path.GetFileName、 DirectoryInfoどちらの方法でも思う結果が得られました。
また、
comboBoxの.DataSourceにそのまま連結させるスマートなコードも大変勉強になりました。

>.Items.Add するのであれば、事前に .Items.Clear() しておかないと、
>ボタンを再度押されたときに、フォルダ名が多重出力されてしまいますよ。
その先までご指導いただけてとても勉強になりました。

ありがとうございました。








No65485 (魔界の仮面弁士 さん) に返信
> ■No65483 (mm さん) に返信
>>C#でForderBrowserDialogにて
> C# ではなく、C# ですね。 (Forder のスペルミスも気になりますが)
>
> 細かい事ですが、ISOおよびJIS規格において、プログラム言語C#は
> LATIN CAPITAL LETTER "C" (U+0043) の次に NUMBER SIGN "#" (U+0023) を
> 書くことになっています。
>
>
>>色々なサイトでDirectory.GetParentやPath.GetDirectoryNameを使った方法を調べ
>>実装してみましたが結果は同じでフォルダ名のみを取得する事ができませんでした。
>
> Path.GetFileName もしくは DirectoryInfo の Name プロパティを使ってみてください。
>
>
> if (fbd.ShowDialog(this) == DialogResult.OK)
> {
> comboBox2.DataSource = Directory.GetDirectories(fbd.SelectedPath).Select(s => Path.GetFileName(s)).ToArray();
> }
>
>
>>エスケープシーケンスなどが関係してくるのでしょうか?どうかご指導お願い致します。
>
> 「C:\Windows\..\Program Files\Sample.Folder」というパスを渡した場合
>
> Path.GetDirectoryName … C:\Windows\..\Program Files
> Path.GetPathRoot … C:\
> Path.GetFullPath … C:\Program Files\Sample.Folder
> Path.GetExtension … .Folder
> Path.GetFileName … Sample.Folder
> Path.GetFileNameWithoutExtension … Sample
>
>
> 「C:\Windows\..\Program Files\Sample.Folder\」というパスを渡した場合
>
> Path.GetDirectoryName … C:\Windows\..\Program Files\Sample.Folder
> Path.GetPathRoot … C:\
> Path.GetFullPath … C:\Program Files\Sample.Folder\
> Path.GetExtension … 空文字列
> Path.GetFileName … 空文字列
> Path.GetFileNameWithoutExtension … 空文字列
>
> のように変換されます。これらのメソッドは、パス文字列の処理を行うだけの
> ものであり、実際に存在するパスかどうかには言及されません。
>
>
>>this.comboBox2.Items.Add(colist);
> .Items.Add するのであれば、事前に .Items.Clear() しておかないと、
> ボタンを再度押されたときに、フォルダ名が多重出力されてしまいますよ。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -