ファイル削除について

このQ&Aのポイント
  • ファイルをワイルドカードを使って一括削除する方法について教えてください。ディレクトリは相対パスで指定できるようにしたいです。
  • 自分で作成したプログラムでファイルのあいまい検索ができず困っています。また、一度に複数のファイルを削除する方法も教えてください。
  • 使用するプログラムの言語はVB.NETです。
回答を見る
  • ベストアンサー

ファイル削除について

ファイル削除について C:\temp\111-001-会計.txt C:\temp\111-001-人事.txt C:\temp\111-001-総務.txt C:\temp\111-001-販売.txt このようなファイルがあったとします これをワイルドカードを使って"111-001*" というファイル全てを削除するプログ]ラムを 教えてください ちなみにディレクトリは相対パスで指定できる ようにしたいです 自分でも作成してみたのですが ファイルのあいまい検索ができず困っているところです また1件しか削除できないのでfor文か何かで回すのかなといった感じです Public Sub DeleteFile(ByVal folder As String, ByVal searchPattern As String) Dim stFileName As String = System.IO.Path.GetFileName(folder + searchPattern) If System.IO.File.Exists(folder + searchPattern) Then System.IO.File.Delete(folder + searchPattern) MessageBox.Show("ファイルを削除しました") End If End Sub

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

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

直接ワイルドカードを使っての削除ならKillを使用します。 確かに、お勧めは出来ません。 もう一つの方法はどうでしょう? My.Computer.FileSystem.DeleteFile を使えば、ループ関数は使いますがワイルドカードを使用しての削除が出来ています。 この部分ですね。 For Each FileName As String In System.IO.Directory.GetFiles( _ My.Computer.FileSystem.SpecialDirectories.Desktop, "*.txt") 'System.IO.File.Delete(FileName) 'オプションはお好みで My.Computer.FileSystem.DeleteFile(FileName, FileIO.UIOption.AllDialogs, _ FileIO.RecycleOption.SendToRecycleBin, FileIO.UICancelOption.DoNothing) Next 「My.Computer.FileSystem.SpecialDirectories.Desktop」を 「C:\temp\」に変更し 「*.txt」の部分を「111-001*」に変更すれば、削除が出来ると思います。

tkwavek
質問者

お礼

お忙しいところ何度もご回答ありがとうございます。 相対アドレスで削除したいのですがそれはこのプログラムで 可能でしょうか。 何分にもプログラマ1年生の新人でして手取り足取りの回答を求め 申し訳けありません

その他の回答 (2)

回答No.3

プログラマーの1年生なんですね。 自分で調べて勉強することはいいことです。 良いところに就職できるといいですね。 ボクは某所でゲームプログラムの教務をしています。 まぁ、教えているのはC言語ですが、 色んな言語に手を出しているので、ある程度ならわかります。 あと、危険だと思われること以外は、 何でも試してみることが大事ですよ。 今回の相対パスで出来るかどうかは試してみるといいです。 まぁ、先ほど教えた「My.Computer.FileSystem.DeleteFile」の関数は、 使ったことが無いので、確実にできるとは言えませんが、 まずできると思います。試してみてくださいね。

回答No.1

http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=7136&reno=7133&oya=7133&mode=msgview&page=0 このURLのやり方で、削除が出来るようになりまます。

tkwavek
質問者

お礼

ご回答ありがとうございます。 ちょっときになったのですが ※お勧めはできませんが、Kill 関数なら ワイルドカードが使用できるようです とあるのであまり使いたくないです。また相対アドレスの指定方法がいまいち わかりませんでした。 せっかくご回答いただいたのに申し訳けありませんが 他のプログラム方法を教えていただけませんでしょうか 本当に申し訳ありません。

関連するQ&A

  • VBでの日付入力値のフォーマットに関して

    教えて下さい。 環境:Visual Basic 2008 画面上にテキスト入力エリアを設け、日付を入力させたいと考えています。 その際に、あらかじめ"/"(スラッシュ)が表示されていて、そこへ数字のみを 入力し、例えば・・・20110101と入力された場合、2011/11/01と変換されて表示される ような形にしたいと考えています。 そこで、以下のようなサンプルを入手し、実行していますが、どうもうまくFormatが できません。 何が原因でしょうか??? Private Sub FRM_発注入力_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load TXT_発注日.MaxLength = 10 End Sub Function SetDateStyle(ByVal myStr As String) As String Dim Temp As String Temp = Replace(myStr, "/", "") If Len(Temp) = 8 Then SetDateStyle = Format$(Temp, "YY/MM/DD") If IsDate(SetDateStyle) = False Then Beep() SetDateStyle = "" End If Else SetDateStyle = myStr End If End Function Private Sub TXT_発注日_TextChanged_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TXT_発注日.TextChanged TXT_発注日.Text = SetDateStyle(TXT_発注日.Text) End Sub TXT_発注日というテキスト入力エリアに入力され、変更があった場合に処理をするような 形となっています。 初歩的な質問で申し訳ありませんが、教えて下さい。 よろしくお願いします。

  • エクセルマクロ フォルダ内のファイル検索で

    よろしくおねがいします。 下記で、どうも指定フォルダ内のファイル名を検索できていないようで 条件の"ないなら"に反応して中断するハズがファイルを開いてしまいます。 思ったのですが、bufの設定にファイル名は指定できないのでしょうか? Sub Start8() Dim buf As String, IptA As String Const Path As String = "C:\001\" IptA = Workbooks("AAA.xls").Sheets("Sheet1").Cells(1, 1).Value buf = Dir(Path & "" & IptA & ".txt") If buf = "" Then Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptA & "は見つかりません" Exit Sub Else Range("A2").Select ActiveCell.FormulaR1C1 = "" & IptFN & "が見つかりました" End If Workbooks.OpenText Filename:= _ "C:\001\" & IptA & ".txt" End Sub

  • vbのsavefiledialogについて

    vbで、テキストボックスに、文字を入力し、ボタン2をクリックすると、ユーザーが指定したところに、指定した名前で、txt形式、html形式、doc形式(このうち、txtと、htmlは必須。)で保存するプログラムを作りたいと思っております。 サイトを見てみますが、なかなかよいものが見つかりません。どなたか教えてください。 書きかけのプログラムと、フォーム図を載せておきます。 また、変更した方がよければ、そちらもおしえてください。 Public Class Form1 Dim texta As String Dim a Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Button1.Text = "リセット" Button2.Text = "保存" texta = TextBox1.Text End Sub Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged texta = TextBox1.Text End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click TextBox1.Text = "" End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click a = DialogResult SaveFileDialog1.OverwritePrompt = True SaveFileDialog1.FileName = "" SaveFileDialog1.Filter = "テキストファイル(*.txt)|*.txt|すべてのファイル(*.*)|*.*" a = SaveFileDialog1.ShowDialog If a = Windows.Forms.DialogResult.OK Then Label1.Text = IO.Path.GetDirectoryName(SaveFileDialog1.FileName) Label2.Text = IO.Path.GetFileName(SaveFileDialog1.FileName) Else Label1.Text = "キャンセルされました。" Label2.Text = "" End If End Sub End Class

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

    いつもお世話になっています。 今、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.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

  • 一度PictureBoxに表示させたファイルを削除したい(VB2005)

    VB2005の質問です。 一度PictureBoxに表示させたファイルを削除したいと考えています。 例 --------------------------------------------------------   Private FileName As String = "C:\パス"      'パス名   '画像の表示   Sub foo()     PictureBox1.Image = Image.FromFile(FileName)   End Sub   'ファイルの削除   Sub bar()     PictureBox1.Image = Nothing     System.IO.File.Delete(FileName)    'a)エラー発生。削除できない   End Sub -------------------------------------------------------- 上記のコードですと(a)の箇所でエラーが発生します。エラー内容は、「別のプロセスで使用されているためファイルにアクセスできません」、というものです。 このファイルを削除するには、どのような処理が必要でしょうか。 以上、どうぞよろしくお願い致します。

  • VBでテキストファイルを作成して,また消したい

    VisualBasicでDLLファイルを呼び出して実行したいのですが, その際に,テキストに一度引数を入れたいと思っています. しかし,不要になれば,そのつどプログラムの中でテキストファイルを削除したいと思っています. テキスト作成は  Open App.Path + "\新規作成.txt" For Output Access Write As 1 mystring = "ByVal ImaFile As String" Print #1, mystring Close #1 でできたのですが, テキストを削除する方法を教えてください. HELPには Sub Manip_Files() Dim fso As New FileSystemObject, txtfile As TextStream, fil1 As File, fil2 As File Set txtfile = fso.CreateTextFile("c:\testfile.txt", True) MsgBox "ファイルを削除します。" ' 現在の位置でファイルのハンドルを取得します。 Set fil1 = fso.GetFile("c:\tmp\testfile.txt") Set fil2 = fso.GetFile("c:\temp\testfile.txt") ' ファイルを削除します。 fil1.Delete fil2.Delete MsgBox "完了しました。" End Sub という方法が載っているのですが, 最初のFileSystemObjectでひっかかります. 参照設定が足らないと思われるのですが, 何を加えたらいいのでしょうか. 教えてください.

  • VB ファイルの検索について

    VB ファイルの検索について こんにちは VB2008でファイルの種類を指定して、検索するプログラムを作っています。 要求: 1ボタンをクリックして、検索対象のフォルダを指定 2事前に決めたファイル種類(*.txt)を検索する 3(*.txt)がある場合はディスクトップにコピーする 今は1ができましたが、2と3について、どうやって書くのかわからないです。 --------------------ソース------------ Public Class Form1 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim SourcePath As String Dim fdb As New FolderBrowserDialog With fdb 'Select to Folder and open it .Description = "Please Select Folder" .RootFolder = System.Environment.SpecialFolder.MyComputer SourcePath = TextBox1.Text .SelectedPath = SourcePath If fdb.ShowDialog() = DialogResult.OK Then TextBox1.Text = fdb.SelectedPath End If End With End Sub End Class ------------------------------------------------------- 以上  宜しくお願い致します。(^@^)

  • フォルダの中にファイルがあるかどうかを読み取りたい

    vbaです。 ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ Option Explicit Sub test() Dim 検索フォルダ As String Dim 検索ファイル名 As String 検索フォルダ = "C:\Users\Public" 検索ファイル名 = "新しいテキスト ドキュメント.txt" If 検索フォルダの中に検索ファイル名がある Then MsgBox 検索ファイル名 & "は存在します" End If End Sub ・・・・・・・・・・・・・・・・・・・・・・・・・・・・・ こんな感じで、フォルダの中にファイルがあるかどうかを読み取りたいのですが これ以上どういうコードを書けばいいかわかりません。 「フォルダの中にファイルがあるかどうか」がわかれば、出来そうな気がするのですが ご教授いただけますか?

  • アクセスでテキストを開く

    アクセスでパスを指定して、特定のテキストファイルを開く方法を教えていただけますか? いかのモジュールを見つけたのですが、どこに、動かないか… フルパスを入れればよいか分かりません。 どうぞ宜しくお願いします。 *********************************************************************************************** Private Declare Function ShellExecute Lib "SHELL32.DLL" Alias "ShellExecuteA" (ByVal hwnd As Long, _ ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, _ ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long Private Sub コマンド0_Click() Dim strFilePath As String Dim lngRet As Long Const SW_SHOWNORMAL = 1 strFilePath = Me.txt_Path 'WinAPIを使って関連付けられたアプリケーションを起動 lngRet = ShellExecute(Application.hWndAccessApp, "OPEN", _ strFilePath, vbNullString, CurDir(), SW_SHOWNORMAL) If lngRet <= 32 Then '返り値が 32 以下の場合はエラー MsgBox "ファイルを開けません!", vbOKOnly + vbExclamation End If End Sub ***********************************************************************************************

専門家に質問してみよう