>すぐに試してみましたところ、comboboxの一番上には正常にファイル名が出てきたのですが、2段目以降に
>..%E3%82%B3%E3%83%94%E3%83%BC%20(2)%20%EF%BD%9E%20test
このような文字が出てきました。
>以降、3,4,5・・・行目と同じような文字がひたすら続いています。
おっと・・・
すみません。どうやら全角文字についての対応を入れていなかったようです。
全角で書かれたファイル名があった場合、そのような文字が出てきてしまいます。
先ほどはちょっと小難しいやり方を使ってしまったんで、もっと単純にやってみます。
というか、こっちの方が絶対いいですのでw
2番目のメソッドのみ変更しました。
'[概要] ファイルの絶対パスを取得し、ファイル名のみを返します
'[引数] pass ファイルの絶対パス
'[戻り値] String ファイル名
Private Function GetFileName(ByVal pass As String) As String
Dim relativePass As String = ""
If Not pass.Contains(".") Then
'ピリオドがないので、ファイルではない
Return ""
ElseIf Not pass.Contains("\") Then
'\サインがないので、何かもよく分からないww
Return ""
Else
'それ以外は、フォルダ構成の中にあるファイルのはず
'ファイル名(絶対パス)から一番最後の\サインとピリオドの場所をそれぞれ探して、部分文字列を得る
relativePass = pass.Substring(pass.LastIndexOf("\") + 1, pass.LastIndexOf(".") - pass.LastIndexOf("\") - 1)
End If
Return relativePass
End Function
私としては、分からないことを質問すること全てがダメとは思っていません。
ただ、回答してもらっても、その内容が理解できないほど難しいのでは、「できた、でもよく分からん」になっちゃうかな、と。
いきなりラスボス(自分がやりたいこと)を攻めるよりも、まずはザコキャラ(自分の現在のレベルにあった課題)をつぶしていった方が、結局はいろんなことができるようになると思います。
・・・なんかお節介になってすいませんm(_ _)m
昨日からVB2008の勉強を始められたんですね。
しかし、mx3tc0830さんがやろうとしている処理は、なかなか手強いですf^_^;
けっこう難しいんですが、コードは次のようにするとできると思います。
'前提として、Form1という名前のフォームと、その上にComboBox1という名前のコンボボックスがあります
Public Class Form1
Private Const directory = "C:\hogehoge" '基準となるパス(定数)
'[概要] Form1がロードされたら実行されます
'[引数] sender senderオブジェクト
' e イベントハンドラ
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'"C:\hogehoge"以下のファイルをすべて取得
Dim files As String() = System.IO.Directory.GetFiles( _
directory, "*", System.IO.SearchOption.AllDirectories)
Dim fileName(files.Length - 1) As String 'ファイル名格納用の配列
Dim i As Integer = 0 'for each内で使用するカウンタ
'ファイル名を取得
For Each file In files
fileName(i) = GetFileName(file)
i += 1
Next
'ComboBox1に結果を表示する
ComboBox1.Items.AddRange(fileName)
End Sub
'[概要] ファイルの絶対パスを取得し、ファイル名のみを返します
'[引数] pass ファイルの絶対パス
'[戻り値] String ファイル名
Private Function GetFileName(ByVal pass As String) As String
Dim u1 As New Uri(directory + "/") '基準となるパス(C:\hogehoge/)
Dim u2 As New Uri(u1, pass) 'ファイル名
'ファイル名(拡張子つき)を取得
Dim relativePass As String = u1.MakeRelativeUri(u2).ToString()
'ファイル名(拡張子つき)から一番最後のピリオドの場所を探して、部分文字列を返す
Return relativePass.Substring(0, relativePass.LastIndexOf("."))
End Function
End Class
VB.NETの最初でしたら、もう少し簡単な材料から取りかかってみた方が、理解しやすくていいと思いますよ。
お礼
出来ました! 本当にありがとうございます! お節介などとは思いません^^ 大変参考になります。 まさか自分が行おうとしていることがそんなに階段を飛ばしているとは思いもしませんでした。 本を読んだ後、自分なりに計算機を作ってみたのですが本を読んだ時よりもずっと仕組みが理解出来たので(と言っても変数やメソッドのみですが)無謀だとは思いつつも何かひとつ作ってみようと思ったんです。 次は、comboboxで選択したファイルの内容をテキストボックスに書き出すプログラムをいろいろ調べてみます。 また質問することがあるかも知れませんが、お時間が許されましたらよろしくお願いいたします。 今回は本当にありがとうございました。