- 締切済み
VB.NETでの特殊なファイル削除操作
VB.NETでの特殊なファイル削除操作 フォルダ内に以下例のような撮影された画像ファイル群があり、各ファイル名は撮影時間を元に(年月日_時分秒_ミリ秒)名前付けされたもので、この同じ「秒」内に撮影された2枚目以降のファイルを、プログラム的に削除したいのですが、上手くいきません。 フォルダ内のファイル 20100709_135601_113.jpg 20100709_135601_222.jpg 20100709_135601_316.jpg 20100709_135601_364.jpg 20100709_135602_347.jpg 20100709_135602_425.jpg 20100709_135603_910.jpg 20100709_135605_175.jpg 20100709_135605_251.jpg 20100709_135606_628.jpg 例えば、一番上の13時56分01秒には、4枚撮影されたjpgファイルがありますが、最初に撮影された「20100709_135601_113.jpg」 だけを残し 残りの 「20100709_135601_222.jpg」 「20100709_135601_316.jpg」 「20100709_135601_364.jpg」 のファイルを消し、1秒1ファイルだけにしたいのです。 そしてこの結果を 20100709_135601_113.jpg 20100709_135602_347.jpg 20100709_135603_910.jpg 20100709_135605_175.jpg 20100709_135606_628.jpg としたいのです。 なお、このjpgファイルを作成する側のアプリは触れません。 こちら側のプログラムで、削除処理を行いたいです。 ファイル名定義もこのままです。 135604のように、秒内で存在しないjpgファイルも存在します。 どなたか、よいお知恵をお貸し下さいませ。 どうぞよろしくお願いします。 (WinXP Vb.NET2010)
- masaokun2
- お礼率44% (4/9)
- Visual Basic
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17068)
VB.NETが特に得意なら別ですが、エクセルVBAでも出来ます。 気が乗らなければ無視してください。 あるフォルダ内のファイル名をエクセルシートのA列のセルに書き出す。 これはGoogleでDir関数やFSOのコード例が沢山在る。「VBA フォルダ ファイル名 全て」で照会 例 データ 書き出し後 20100709_135601_113.jpg 20100709_135601_222.jpg 20100709_135601_316.jpg 20100709_135601_364.jpg 20100709_135602_347.jpg 20100709_135602_425.jpg 20100709_135603_910.jpg 20100709_135605_175.jpg 20100709_135605_251.jpg 20100709_135606_628.jpg A列でソート。これもVBAで出来るが手動が確実。 処理ロジックは、 A列のデータを全行読むが、読んで直前の行と秒までの同じものはファイル削除する。 直前と秒までの文字列で違うものは削除しない(=残す)。 コード Sub test01() d = Range("A65536").End(xlUp).Row '最下行取得 MsgBox d j = 1 For i = 2 To d If Left(Cells(i, "A"), 15) = Left(Cells(i - 1, "A"), 15) Then 'ファイル削除(コードは下記 '削除明細 Cells(j, "C") = Cells(i, "A") j = j + 1 End If Next i End Sub ーー 削除明細は、C列に 20100709_135601_222.jpg 20100709_135601_316.jpg 20100709_135601_364.jpg 20100709_135602_425.jpg 20100709_135605_251.jpg ーー ファイル削除のコードは 「VBA ファイル 削除」で照会 http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_110_100.html Kill cnsSOUR のところ。
- bluecampus
- ベストアンサー率66% (138/209)
あ、消すやつは逆だった・・・ ということで、 Dim delFileNames As New List(Of String) For Each fileName As String In fileNames mfi = New MyFileInfo(fileName) ' 日付で検索し登録されているか If dic.ContainsKey(mfi.TimeStamp) Then ' ミリ秒を比較し、小さければ差し替え If dic(mfi.TimeStamp).MliliSec > mfi.MliliSec Then delFileNames.Add(dic(mfi.TimeStamp).FileName) dic(mfi.TimeStamp) = mfi Else delFileNames.Add(fileName) End If Else ' 登録 dic(mfi.TimeStamp) = mfi End If Next ' 全部表示 For Each fileName As String In delFileNames Console.WriteLine(fileName) Next こう?
- bluecampus
- ベストアンサー率66% (138/209)
何がうまくいかないのかよくわからないけど、自分だったら ファイル名・日付時間(ミリ秒は除く)・ミリ秒のクラスやら構造体とDictionaryを使ってやるかな。 Imports System Imports System.Collections.Generic Module Module1 Class MyFileInfo Dim fileName_ As String Dim timeStamp_ As DateTime Dim miliSec_ As Integer Public Sub New(ByVal fileName As String) Me.FileName = fileName ' _ と . で文字列を分割 Dim token As String() = fileName.Split(New Char() {"_"c, "."c}) ' 0番目の要素は日付、1番目の要素は時間 -> 時間型に変換 Me.TimeStamp = DateTime.ParseExact(token(0) & token(1), "yyyyMMddHHmmss", Nothing) ' 2番目の要素はミリ秒 -> 数値型に変換 Me.MliliSec = Integer.Parse(token(2)) End Sub Public Property FileName() ' 省略 End Property Public Property TimeStamp() ' 省略 End Property Public Property MliliSec() ' 省略 End Property End Class Sub Main() Dim dic As New Dictionary(Of DateTime, MyFileInfo) Dim fileNames As String() = _ New String() {"20100709_135601_113.jpg", _ "20100709_135601_222.jpg", _ "20100709_135601_316.jpg", _ "20100709_135601_364.jpg", _ "20100709_135602_347.jpg", _ "20100709_135602_425.jpg", _ "20100709_135603_910.jpg", _ "20100709_135605_251.jpg", _ "20100709_135605_175.jpg", _ "20100709_135606_628.jpg"} Dim mfi As MyFileInfo For Each fileName As String In fileNames mfi = New MyFileInfo(fileName) ' 日付で検索し登録されているか If dic.ContainsKey(mfi.TimeStamp) Then ' ミリ秒を比較し、小さければ差し替え If dic(mfi.TimeStamp).MliliSec > mfi.MliliSec Then dic(mfi.TimeStamp) = mfi End If Else ' 登録 dic(mfi.TimeStamp) = mfi End If Next ' 全部表示 For Each mfi In dic.Values() Console.WriteLine(mfi.FileName) Next End Sub End Module ※インデント保持のため全角空白! エラー処理とか考えていないです。 ちなみにVB.NETはほとんど触っていないのでもっといいやり方があるかも。
関連するQ&A
- VB.NETで出来るファイルについて
VB.NETの学習書を買って 中に入ってるサンプルを見たんですが 1つのプログラムに対して ファイルがたくさんあって何がなんだがよくわかりません。 各ファイルについて説明してるサイトとか知りませんか? たくさんあっても弄るのって一部だったりするんでしょうか? VBの時もたくさんあるなぁ~程度のひどい認識だったんですが。
- 締切済み
- Visual Basic
- Visual Basic 6.0について
Visual Basic 6.0について いまプログラムを組んでいるのですが、どうしても分からない点があるので質問させていただきます。 フォルダに毎日更新したときに追加される「aaaa_20100720123456(年月日時分秒).txt」というファイルがあるとします。(年月日時分秒の部分は更新した時間です。) このファイルをVB6のプログラム内でString型で定義した変数を=で結びたいのです。年月日の部分まではFormat(Now,yyyyMMdd)でいいのですが、時分秒の部分は毎日更新する時間が微妙に違うのでどう書けばいいかが分かりません。 分かりづらいと思いますが、どなたか教えて頂けますか?宜しくお願いします。 このような感じです。 Dim a as String a="aaaa_"+Format(Now,"yyyyMMdd")+(この部分が分かりません)+".txt"
- ベストアンサー
- Visual Basic
- VB.NETで指定のURLにファイルを送る事は出来ますか?
プロバイダーの自分のスペースなどにファイルを 送るプログラムをと思っているのですが、 VB.NETではその様なことは出来るでしょうか? FTPソフトなどを使って行う作業だと思いますが、 それと同じように、IDやパスワードを送信すれば ファイルを受け付けてくれるのでしょうか? まだ出来ればフォルダ(ディレクトリ)を作ったりも出来ると良いのですが。 VB.NETの何と言うものを使用するのか教えて頂けると助かります。 宜しくお願いします。
- ベストアンサー
- Visual Basic
- 全てのjpgファイルを一つ上の階層に移動したいです
ネットワークカメラの設定で年月日時分秒を利用してjpgファイルが 以下の様にUPされます。 ./www/hoge/20160309/19/194512_1.jpg ./www/hoge/20160309/19/194512_2.jpg ./www/hoge/20160309/20/203317_1.jpg ./www/hoge/20160309/21/214055_1.jpg ./www/hoge/20160310/07/070503_1.jpg ./www/hoge/20160310/07/082235_1.jpg 時間だけを表している2桁数字のフォルダが邪魔なので、jpgファイル 全てを一括で一階層上の年月日8桁の数字フォルダ内に移動するには、 どのように記述すれば良いかご教示お願いします。 ネットワークカメラは24時間作動しているので、手動で移動するのは 面倒です。どうぞ宜しくお願いします。
- 締切済み
- Perl
- VB.netでAccess操作
タイトル通り、VB.netでAccessを操作するプログラムを作っています。 項目が、『番号』『氏名』『選択科目1』『選択科目2』 VBのフォーム上にAccessのファイルに登録されている全てのデータを取り出して二次元配列のように表示させます。 ボタンは編集、削除、行追加です。 編集 --- このボタンを押すとAccessに反映 削除 --- このボタンを押すとチェックボックスにチェックされた行が削除される 行追加 --- このボタンを押すと、表示されているデータの下に一行分、行が追加され、そこから入力できるようになる 私はtextboxを動的に配置して、textboxを二次元配列で処理できるようにプログラムを組んでみたのですが 何だか上手なプログラムが組めなくなってしまいまして困っているところです・・・。 仕様には、登録データ分だけの行数が表示されなくてはいけないと書いてあります。 つまり削除がある時点で、一行分を削除するためにはtextboxを消さなくてはいけなくなってしまいました。 (ex データが四件あるとして、その時点ではtextbox(0,0) ~ textbox(3,3) ですが、一件削除するとtextbox(0,0)~textbox(2,3)になり textbox(3,0)textbox(3,1)textbox(3,2)textbox(3,3)を削除しなければいけない) 非表示ではなく、textboxコントロール自体を削除したいのですが、そんな方法はあるのでしょうか? それともこのプログラムの組み方は間違った方法なのでしょうか? VB.net初心者のため、未だにどんなコントロールを使えばうまく処理できるのか分かっていないところがありますので、 どんな些細なことでもお気づきのことがありましたら、教えてください。 自分だったらこんな機能や処理をする!ということもお待ちしております。 宜しくお願いします。
- 締切済み
- Visual Basic
- VB.NETでフォルダを圧縮
VB.NETでフォルダ(ファイル)を圧縮するプログラムを作っています。 http://homepage1.nifty.com/rucio/main/Samples/Sample057LhaPress.htm このページのやり方が一番簡単だと思ったのですが、 VB6のコードなので使えません。 どうすればVB.NETで使えるでしょうか。
- ベストアンサー
- Visual Basic
- 作成してから○○日以上経過したファイルを削除したい
いつもお世話になっています。 現在VC++で5分おきにファイルが自動生成されるプログラムを作っています。 ファイル名は年月日時分秒をつけています。20080306100500、20080306100000など。 この処理に、あるタイミングで現時点より2日(48時間)以上前のファイルはすべて削除する処理を加えたいと考えています。 現時点より○○日以上前もしくは○○時間以上前というのは、どのように判別したら良いかで詰まっています。 何か良い条件の書き方等ありましたら、教えていただけると助かります。
- ベストアンサー
- C・C++・C#
- 削除できないファイル
こんにちは。 削除できないファイルがあり、困っています。 Local Setting\Temporary Internet FIles\Content.IE5 の中にある、indexというファイルです。 削除しようとすると「indexを削除できません、ほかの人またはプログラムによって使用されています。ファイルを使用している可能性があるプログラムをすべて閉じてから、やり直してください」と表示されます。 ファイルの種類は、InterVideo Media Fileとなっています。 しかし、開いても何も再生されません。 同じフォルダ内には、ネットで閲覧したHPの画像等が幾つものフォルダに分かれて保存されています。(このフォルダは消去できます。) どうしたら、削除できるのでしょうか? 回答、宜しくお願い致します。
- ベストアンサー
- Windows XP
- VB.NETでフォルダの一覧を更新する方法
VB.NETでフォルダの一覧を更新する方法について質問させて下さい。 現在ネットワーク上の共有フォルダのファイルの更新日付を監視するソフトをVB.Netで作成したのですが 実際にはファイルが更新されているのに更新されたとソフトで認識するまでに1分くらいタイムラグ が発生します。 監視するのは 「IO.File.GetLastWriteTime」 という関数で監視しています。 そこで エクスプローラのメニューには「最新の情報に更新」というメニューが存在しますが VB.Netでプログラム的に「最新の情報に更新」を実行させる方法はないでしょうか? よろしくお願いいたします。
- ベストアンサー
- Visual Basic
- 初心者ですアドバイスお願いします
ウェブカメラを使い画像をフォルダに保存しているのですが、 困った事がありまして投稿させて頂きました。 出来る画像ファイル名 年日時分秒01.jpg 例えば今日の1時15分45秒だと 2005101113154501.jpgです。 この様な画像ファイルが、 5秒おきにフォルダに作成されて行きます。 (たまにカメラが落ちるので秒にバラツキも出ます。 この条件下で質問したい事があるのですが、 5秒おきに作成される膨大な画像ファイルを 1時間1枚残し残りは全削除したいのです。 使っているOSはLInux3.2です 良い方法等ありましたらアドバイスお願いします
- 締切済み
- その他(プログラミング・開発)
お礼
たくさん回答ありがとうございました。 以下で望む動作をしてくれるプログラムが組めました。 bluecampusさんimagashiさん、ご教授ありがとうございました。 Dim objFso As Object Dim objFolder As Object Dim objFile As Object Dim lngCount As Long Dim mnm As Object objFso = CreateObject("Scripting.FileSystemObject") objFolder = objFso.GetFolder("D:\") lngCount = 0 mnm = 0 Debug.Print("ファイル数:" & objFolder.Files.Count) For Each objFile In objFolder.Files lngCount = lngCount + 1 If mnm = Mid(objFile.name, 10, 6) Then Kill("D:\" & objFile.Name) Else mnm = Mid(objFile.name, 10, 6) End If Next