フルパスからファイル名取得方法

このQ&Aのポイント
  • VBでフルパスからファイル名を取得する方法について教えてください。
  • 指定したフォルダのフルパスを「bmpFiles」に入れているのですが、表示する時はファイル名のみの表示にしたくて「Path.GetFileName」を使用しようとしたのですが、「型'stringの1次元配列'の値を'string'に変換できません」というエラーが出てしまいます。
  • VBを始めたばかりでよく分からないので、ファイル名の取得方法についてアドバイスをお願いします。
回答を見る
  • ベストアンサー

フルパスからファイル名取得の方法

指定したフォルダのフルパスを「bmpFiles」に入れているのですが、表示する時はファイル名のみの表示にしたくて「Path.GetFileName」を使用してファイル名を取得しようとしたのですが、「型'stringの1次元配列'の値を'string'に変換できません」というエラーが出てしまいます。 VBを始めたばかりでよく分からないのでアドバイスをお願いします。 Dim imageDir As String = fbd.SelectedPath ' 指定フォルダまでのディレクトリ Dim bmpFiles As String() = _ System.IO.Directory.GetFiles(imageDir, "*.bmp") 'フルパス Dim bmpFileName As String = _ Path.GetFileName(bmpFiles)  ←bmpFilesで上記エラー

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Directory.GetFilesは「複数の」ファイルパスを返します。 一方、Path.GetFileNameは「1つのファイルパス」から「1つのファイル名」を返します。 ですので、n個→1個というのは何をもってその1個になるのか決まらないのでできないということです。 (ある小学校のクラスの「佐藤」という苗字の児童から一人の名前を取得するというイメージ) 複数のファイル名を取得できればいいのであれば、For Each等でループして 1個→1個という変換をしてください。

siriusu-1
質問者

お礼

素早いご回答ありがとうございます! ファイル名の一覧を作成する為に使ったのですが、まずは一つずつ読んでから一覧表示するつもりだったので、とても的外れな書き方をしてしまったのですね。 とても丁寧な説明で分かりやすかったです。 サムネイル表示をしようと思っていて、 画像はImageList1.Images.Add(thumbnail)で、 ファイル名はListView1.Items.Add(bmpFiles(i), i)で表示させています。 bmpFilesの所をがフルパスなので、ファイル名のみに変更しようとしたのですが、いま一つ分からなくて。 別の関数も調べてみます。

関連するQ&A

  • VB.NRT FolderBrowserDialogを使用して、選択したフォルダ内のファイルを表示させるには?

    VB.NET初心者です。 ネットで調べてFolderBrowserDialogを使用して、フォルダを表示させ、フォルダのパスを取得するところまではできたのですが、フォルダの中のファイルを表示させるには、どうしたらよいのでしょうか? OpenFileDialogクラスを使えば、ファイルは表示できるようですが、ファイルの入っているフォルダのパスだけ取ってきたい(複数ファイルを一度に読みこむため)のですが、何か良い手はありませんでしょうか? また、FolderBrowserDialog使用で前回選択したフォルダを次にダイアログを開いたときにも表示させることは可能でしょうか? よろしくお願いいたします。 Dim fbd As FolderBrowserDialog = New FolderBrowserDialog() fbd.Description = "フォルダを指定してください。" If fbd.ShowDialog() = DialogResult.OK Then Console.WriteLine(fbd.SelectedPath) End If Dim folder As String = fbd.SelectedPath Dim serchpattern As String = "*.txt" Dim files As New ArrayList 'フォルダ名格納 Get_FPath(folder, serchpattern, files) End Sub

  • ファイルコピーの事で質問です。

    質問ですが、 'フォルダセット Dim fbd As New FolderBrowserDialog fbd.Description = "フォルダを指定して下さい。" fbd.RootFolder = Environment.SpecialFolder.Desktop fbd.SelectedPath = Environment.SpecialFolder.Desktop 'コピー System.IO.File.Copy(fbd.SelectedPath & "\test.pak", System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFiles) & "\test.pak") フォルダを選択した後、 そのフォルダ内の「test.pak」をコピーして、 プログラムファイルを取得して、取得した先の場所に保存したいのですが、 これをデバッグすると、怒られてしまいます。 "(C:\Program File\test.pak) の一部が見つかりませんでした" という怒られ内容です。 ドコモ間違ってないのに、この様なエラーが出てしまうのですが 何処が悪いのでしょうか?どの様な改善をすれば良いでしょうか?

  • 最下層のファイルまで取得する

    VB.NETというサイトの「フォルダ以下のファイルを最下層まで検索または取得する」(http://jeanne.wankuma.com/tips/vb.net/directory/getfilesmostdeep.html)に書かれているコードを実行しようとしてもエラーが出てしまいます。どのように修正したら実行されるのか、ご教授いただけないでしょうか。よろしくお願いいたします。 VBAのバージョンは7.0です。 サンプルにある通り、C直下にHogeフォルダを作り、その中にHoge.txtを作ってあります。 標準モジュールに「使用例は以下のようになります。」に書かれているコードを、クラスモジュールには「以下にサンプルコードを示します。」に書かれているコードを張り付けました。クラス名は「GetFilesMostDeep」としています。 下記がコードの内容となっています。 ★標準モジュール----------------------------- Sub Macro4() ' ファイル名に「Hoge」を含み、拡張子が「.txt」のファイルを最下層まで検索し取得する Dim stFilePathes As String() = GetFilesMostDeep("C:\Hoge\", "*Hoge*.txt") Dim stPrompt As String = String.Empty ' 取得したファイル名を列挙する For Each stFilePath As String In stFilePathes stPrompt &= stFilePath & System.Environment.NewLine Next stFilePath ' 取得したすべてのファイルパスを表示する If stPrompt <> String.Empty Then MessageBox.Show (stPrompt) End If End Sub ★--------------------------------------- ★クラスモジュール-------------------------------- ''' --------------------------------------------------------------------------------------- ''' <summary> ''' 指定した検索パターンに一致するファイルを最下層まで検索しすべて返します。</summary> ''' <param name="stRootPath"> ''' 検索を開始する最上層のディレクトリへのパス。</param> ''' <param name="stPattern"> ''' パス内のファイル名と対応させる検索文字列。</param> ''' <returns> ''' 検索パターンに一致したすべてのファイルパス。</returns> ''' --------------------------------------------------------------------------------------- Public Shared Function GetFilesMostDeep(ByVal stRootPath As String, ByVal stPattern As String) As String() Dim hStringCollection As New System.Collections.Specialized.StringCollection() ' このディレクトリ内のすべてのファイルを検索する For Each stFilePath As String In System.IO.Directory.GetFiles(stRootPath, stPattern) hStringCollection.Add (stFilePath) Next stFilePath ' このディレクトリ内のすべてのサブディレクトリを検索する (再帰) For Each stDirPath As String In System.IO.Directory.GetDirectories(stRootPath) Dim stFilePathes As String() = GetFilesMostDeep(stDirPath, stPattern) ' 条件に合致したファイルがあった場合は、ArrayList に加える If Not stFilePathes Is Nothing Then hStringCollection.AddRange (stFilePathes) End If Next stDirPath ' StringCollection を 1 次元の String 配列にして返す Dim stReturns As String() = New String(hStringCollection.Count - 1) {} hStringCollection.CopyTo(stReturns, 0) Return stReturns End Function

  • ActiveWorkbook.Path取得できない

    ActiveWorkbook.Pathでパス名を取得して、 同じフォルダ内の別のエクセルシートを開きたいのですが、 見つかりませんと、エラーになります。 ただしそのエクセルを直接開いて名前を付けて同名で上書き保存をすると 取得できるようになるのですが、 すべて閉じて、再度実行すると、また取得できなくなるという現象が起こっているのですが 毎回上書き保存するわけにいかない為 何かよい方法はありますでしょうか? ----------------------------------- Dim strPath As String Dim strBookName As String strPath = ActiveWorkbook.Path strBookName = Dir(strPath & "\管理簿.xlsm") 'ファイル名取得 On Error GoTo myError Workbooks.Open FileName:=strBookName

  • テキストファイルへの書き出し

    ExcelVBAについて教えてください。 Dim path As String Dim FullPath As String Path ="C:\" Dim FN As String FN ="abc.txt" Dim intFF As Integer intFF = FreeFile FullPath = Path & "\" & FN Open FullPath For Output As #intFF Print #intFF, FullPath Close #intFF とやると、Open FullPathのところで、実行時エラー 76、パスが見つかりませんと表示されてしまいます。 やりたいことは、Excel VBAでテキストファイルを新規につくり、そこへ書き出し、保存したいです。ファイル名はFullPathで指定したファイル名を新規で作り出し、それに対して書き出し、保存をしたいです。 何が間違っているのでこのようなエラーが表示されてしまうのでしょうか?回避方法がありましたらご教授お願いいたします。

  • リストボックスにファイル名のみを表示するには?

    いつもお世話になっています。 今、VisualStudio.NETのVB.NETを使用して勉強しているものです。 現在、特定のフォルダからその中に入っているファイルを リストボックスに表示させたいと思っています。 フルパスを表示させることはできたのですが、ファイル名のみの表示がうまくいきません。 どなたか教えていただけないでしょうか。 以下のようにコードを書いております。 一度、TextBox1にフォルダのパスをコピーする仕組みになっています。 GetFileName関数を使用すればいいのかもしれませんが、 うまく組み合わせることができません。 どうぞよろしくお願いいたします。 Private Sub GetAllFiles(ByVal folder As String, _ ByVal searchPattern As String, ByRef files As ArrayList) 'folderにあるファイルを取得する Dim fs As String() = _ System.IO.Directory.GetFiles(Me.TextBox1.Text, searchPattern) 'ArrayListに追加する files.AddRange(fs) End Sub Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim subFolders As New ArrayList() Dim files As New ArrayList() 'TextBox1以下のファイルをすべて取得 GetAllFiles(Me.TextBox1.Text, "*.*", files) 'ListBox1に結果を表示する Me.ListBox1.Items.Clear() Me.ListBox1.Items.AddRange(files.ToArray()) End Sub

  • VBで選択したフォルダにフォルダをコピーしたい

    VBで、選択したフォルダに、中身の入ったフォルダを上書きしてコピーするプログラムを作りたいと思い、フォルダを選択し、選択したフォルダをラベルに表示させるというところまではできました。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim fbd As New FolderBrowserDialog fbd.Description = "フォルダを指定してください。" fbd.RootFolder = Environment.SpecialFolder.Desktop fbd.SelectedPath = "C:\Windows" fbd.ShowNewFolderButton = True If fbd.ShowDialog(Me) = DialogResult.OK Then Console.WriteLine(fbd.SelectedPath) Label3.Text = fbd.SelectedPath End If End Sub ですが、ここから試行錯誤を繰り返してみるも、FolderBrowserDialogで選択したフォルダにフォルダを上書きすることができないのです。アドバイスよろしくお願いします。

  • .xlsファイルが存在するパスを表示させたい

    エクセルマクロ初心者です。 .xlsファイルをサブフォルダも含め検索し、A列にファイル名、B列にファイルが存在するパスを表示させるにはどうしたらいいでしょうか?検索するベースのディレクトリは決まっている”C:\temp”のでtemp以下、.xlsがどこに存在するのかを検索するマクロを組もうとしています。 いろんな書き込みを探し、サブフォルダを含め、ファイル名を取得するものは発見できたので組み込んでみましたが、、パスの表示方法がわかりません。 cnt = 0 Call Sample3("C:\temp") Callでサブルーチンsample3に渡し、ファイル名を取得しています。  Dim cnt As Long Sub Sample3(Path As String) Dim buf As String, f As Object buf = Dir(Path & "\*.xls") Do While buf <> "" cnt = cnt + 1 Cells(cnt, 1) = buf buf = Dir() Loop With CreateObject("Scripting.FileSystemObject") For Each f In .GetFolder(Path).SubFolders Call Sample3(f.Path) Next f End With End Sub あとは、どのように書けばいいのでしょうか? 宜しくお願い致します。

  • Active Basic フォルダの絶対パスの取得

    ファイルまでの絶対パスの取得のように、自分のフォルダまでのパスを取得するにはどうしたらいいのでしょうか? D:\aaaa\bbbb\cccc\dddd\abcd.exe があって、 D:\aaaa\bbbb\cccc\dddd\ を取得したいのですが・・・ 実験してみたのですが、上手くいきませんでした。 すみませんが、やり方をご教授ください。お願いします。 ↓頑張った証 '自分自身のファイルパスを取得する Dim path[MAX_PATH] As Byte Dim FileName As BytePtr Dim MaxFilePath As Long Dim MyFileName As Long Dim AllByte As Long Dim MidAns As String GetModuleFileName(NULL,path,MAX_PATH) 'ファイルパスからファイル名を抜き出し、その大きさを取得して、引く FileName=malloc(Len(path)+1) GetFileTitle(path,FileName,Len(path)+1) MaxFilePath=Len(path) MyFileName=Len(FileName)+1 AllByte=MaxFilePath-MyFileName 'フォルダまでのパスを抜き出す MidAns=Mid$(path,1,54) free(FileName)

  • Excel VBA:ダイアログを使ってファイル名を取得したい

    ファイルを開く際に、GetOpenFilenameを使用し、以下のように記述しています。 Dim sFName As String Dim sPath As String sPath = ThisWorkbook.Path & "\データフォルダ" ChDir sPath sFName = Application.GetOpenFilename(FileFilter:="CSVファイル(*.csv),*.csv", MultiSelect:=False) このとき、win98ですと、指定したフォルダが表示されますが、 win2000やXPですと、Excelのカレントフォルダが表示されます。 ダイアログ表示したときに、任意のフォルダを表示させるには、どのようにしたらよいですか? ご回答よろしくお願いします。

専門家に質問してみよう