ファイル名が日付のファイルの存在を確認する方法

このQ&Aのポイント
  • VB6でファイル名が日付の場合に、ファイルの存在を確認する方法がわかりません。
  • ログ作成時にファイル名を日付で作成し、2行書き込みたいが、同じ日付のファイルが存在する場合は1行だけを書き込みたい。
  • ファイル名が日付で流動的なので、確認方法がわかりません。現在のコードでは毎回2行書き込んでしまいます。
回答を見る
  • ベストアンサー

ファイル名が日付のファイルの存在を確認する方法

OK Waveにお世話になっております。 VB6でソフト製作している初心者ですが、ファイル名が日付の場合に、 そのファイルの存在を確認する方法がわかりません。 対象物に設定完了後にログ作成で、ファイル名を日付でTxtファイルを作成して2行書き込むのですが、再度違う対象物に設定完了時は同じファイル名が存在するなら(同じ日付なら)1行だけ書き込みたいのです。 (1日に10回くらい設定する予定ですので、全て一つのファイルにログを残したい。。。) <やりたいこと> 1.設定完了 ↓ 2.ログ作成作業開始 ↓ 3."C:\Log\"がなければフォルダを作成する ↓ 4.同じファイル名がなければ2行書き込んで保存 ↓ 5.同じファイル名があれば1行だけ書き込んで保存 ↓ 6.以後繰り返し。 4~5がどうしても出来ません。 ファイル名が日付で流動的なので、存在の確認の方法がわかりません。 下記に現在の4~5のコードを書きます。 毎回毎回2行書き込んでしまいます・・・。 ----------------------------------------------------------------------------------- Dim fileNo As Integer Dim FileName As String Dim IDNumber As String If Dir("C:\Log\", vbDirectory) = "" Then 'C:\Logフォルダがあるか確認 MkDir ("C:\Log\") 'なければフォルダ作成する End If 'ファイル番号の取得 fileNo = FreeFile 'ファイルを追加モードで開く (ファイル名の生成) Open "C:\Log\" + Format(Date, "yyyy年mm月dd日") + ".txt" For Append As #fileNo 'txtファイルへ書き込む Print #fileNo, "設定日時,対象番号,設定値" Print #fileNo, Format(Now, "hh:mm:ss") + "," + Format(IDNumber) + "," + Format(check, "000000") Close #fileNo 'ファイルを閉じる ----------------------------------------------------------------------------------- ちなみに下記のようにやってみましたがDate.txtの存在を認識してくれません。。。 If Dir(Date.txt) = "" Then Print #fileNo, "設定日時,対象番号,設定値" Print #fileNo, Format(Now, "hh:mm:ss") + "," + Format(IDNumber) + "," + Format(check, "000000") Close #fileNo Else Print #fileNo, Format(Now, "hh:mm:ss") + "," + Format(IDNumber) + "," + Format(check, "000000") Close #fileNo End If あとここだけなんです。 6/13(月)納期なので、どなたかわかる方、助けてください! よろしくお願いいたします!

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

  • ベストアンサー
  • uruz
  • ベストアンサー率49% (417/840)
回答No.3

1) ファイル名が "C:\Log\" + Format(Date, "yyyy年mm月dd日") + ".txt" なのだから Dir()関数で存在をテェックする時も Dir("C:\Log\" + Format(Date, "yyyy年mm月dd日") + ".txt",vbNormal) でないとテェックできません。 2) ファイルをOpen後にDir()関数でテェックしていますがOpenした時点でファイルは作成されますのでかならず「有り」になってしまいます。したがってOpen前にテェックしなければなりません。 Dim FileName As String Dim FileFlag As Boolean -省略- FileName="C:\Log\" + Format(Date, "yyyy年mm月dd日") + ".txt" FileFlag=iif(Dir(FileName,vbNormal<>"",True,False) -省略- Open FileName For Append As #fileNo  if fileFlag=False Then   Print #fileNo, "設定日時,対象番号,設定値"  end if  Print #fileNo, Format(Now, "hh:mm:ss") + "," + Format(IDNumber) + "," + Format(check, "000000") Close #fileNo 'ファイルを閉じる 参考: 文字列の連結には「+」ではなく「&」を使用する方が望ましいです。 "C:\Log\" & Format(Date, "yyyy年mm月dd日") & ".txt"

ichyojp
質問者

お礼

ありがとうございます! Dir("C:\Log\" + Format(Date, "yyyy年mm月dd日") + ".txt",vbNormal) で認識するんですね! ファイルオープン前にチェックするのは頭にありませんでした。 VB環境が今日はないので、月曜朝確認してみます。 文字列の連結には「+」ではなく「&」が望ましいのは何ででしょうか? よりよいプログラムにするために知りたいです!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Open "C:\Log\" + Format(Date, "yyyy年mm月dd日") + ".txt"でこの名前で開くのに >If Dir(Date.txt) = "" Then でチェックできるのかな。 Dir (1)関数の()内は文字列で在るべきでしょう。 (2)またフルパスで在るべきでしょう (3)存在しないときは、空白が返る(ヌルストリング) この点に違反してませんか。 >C:\Log\" + Format(Date, "yyyy年mm月dd日") + ".txt"んおような名前になるべきなのでは? ーーー ファイルの存在を調べるのに FSOで.FileExistsというのも在ります。 興味があれば、Googleででも「FSO .FileExists」で照会のこと。

ichyojp
質問者

お礼

ありがとうございます! C:\Log\" + Format(Date, "yyyy年mm月dd日") + ".txt"で明日やってみます。 FileExistsも調べてやってみます。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

DATE.txtはどこで宣言してどこで値を設定してますか?見あたらないようですが。 DATEは予約語じゃないですかね。 FileSystemObjectを利用したほうが楽だと思います。 キーワード「filesystemobject vb6」でgoogle検索してみてください。 先頭に出てくるページにサンプルたくさんありますよ。 ファイル、ディレクトリの存在確認のサンプルもあり。

ichyojp
質問者

お礼

ありがとうございます。 (Date, "yyyy年mm月dd日") + ".txt"をDATE.txtと勝手に置き換えました。。。 FileSystemObjectを調べて試してみます!

関連するQ&A

  • PowerShellでファイル存在確認するとき

    PowerShellについて勉強中です。 現在、日付を取得したものをファイル名にしてログファイルを作成し、そこに、その日の実行したスクリプトの結果が追記されていくようにしたいのですが、新規にファイルを作成した時には、当然問題がないのですが、new-itemを使用したため、すでにフォルダがありますとエラーになってしまいます。 ログファイルを作成する部分と、スクリプト実行の部分を分けずに、ひとつのps1にしなければなりません。 そのため、if文などで分岐をする必要があると思うのですが、ログのファイル名が日付を取得するので、このような場合、どう記述するものなのか、教えていただければと思います。 日付を取得してファイルを作成したところまでを、下に書きます。 よろしくお願いします。 Function GetFileName([ref]$fileName) #日付を取得してログファイル名に設定する { $invalidChars = [io.path]::GetInvalidFileNamechars() $date = Get-Date -format yyyy/MM/dd $fileName.value = ($date.ToString() -replace "[$invalidChars]","-") + ".log" } $fileName = $null #ログファイルをc:\shareに作成する GetFileName([ref]$fileName) new-item -path c:\share -name $filename -itemtype file この下に、実行するバッチの起動などのスクリプトが続きます。

  • 一番古い更新日付をチェックする

    OS:RedHatLinuxES3.0 下記についてご存知お方がいらっしゃいましたら教えてください。 [file.log]と言うファイルがあります。 このファイルは、5MBになると、5MBに達した時の、年月日時分秒を付けたファイル名[file-YYYY_MM_DD-hh_mm_ss.log]になります。 また、このファイルは5世代管理とするので、[file.log]が一つ、残り4つは[file-YYYY_MM_DD-hh_mm_ss.log]となります。 そこで、質問ですが、この5つのファイルの中で一番古い更新日付を持つファイルのみを他のディレクトリにコピーしようと思っています。 つまり、[file-YYYY_MM_DD-hh_mm_ss.log]ファイル名の一番古い日付を持つファイルを選択したいのですが、いい方法がありましたら教えて下さい。

  • ファイル名に日付を入れてアップロードするには?

    VB.NETで、ログをftpにアップロードする際に、ログ名をアップロードした日付+log.txtとするにはどのように書けばよいのかわかりません。 具体的には、20080109log.txtの様な形でftpにアップロードできるようにしたいのですが。 現時点でのソースは下記のとおりです。 myrtb.SaveFile(Application.StartupPath & "\log.txt", RichTextBoxStreamType.PlainText) Dim logaddress As String Dim logID As String Dim logpass As String logaddress = "ftp://foobar/hoge//myFolder/log.txt" logID = "hoge" logpass = "hogehoge" Try My.Computer.Network.UploadFile(Application.StartupPath & "\log.txt", logaddress, logID, logpass) Catch ex As Exception End Try

  • ショートカットのリンク先(ファイル名)を固定ではなくシステム日付で指定したい

    今日、20050119.txtというファイルを作り、 このファイルのショートカットを作成してたたくと、20050119.txtが開きます。 明日、20050120.txtというファイルを作り、 今日作成したショートカットのプロパティのリンク先(ファイル名)を 20050120.txtに変更してたたけば、20050120.txtが開きます。 この作業が面倒なので、最初から「'システム日付'.txt」をショートカットのリンク先にしたいのですが、 そのような技は可能でしょうか。 また、yyyymmddやyy-mm-ddなど自在に変換できるformat関数のようなものや n日前(システム日付-n)などを表現するdateadd関数のようなものがあるのでしょうか。

  • ファイル名を今日の日付、時刻で保存する

    マクロについて教えてください エクセル(2003?)でマクロを使って ファイルを保存するボタンをつくろうと思います。 「ファイル名を今の月-日-時-分で保存する」 という内容を書きたいと思います。 保存するところまではできるのですが、 今日の月-日-時-分を自動的にファイル名に入れる ところをどうしたらよいかわかりません。 Filename = Format(Date, "yyyy-mm-dd") と入れれば日付が入るのはわかったのですが、 時刻も入れたいです Filename = Format(Date,"yyyy-mm-dd",Time,"hh-mm-ss") こんな風に書いてみたのですが、うまく機能しませんでした ご存知の方、ご教授ください。

  • 日付の自動表示がうまくできません。

    VBAを使って、EXCELで日付を自動表示するマクロを作ったのですが、うまく動作しません。 設定の条件は、(対象の行は6~31行目で) D列に入力があった場合、G列に日付を表示、 M列に入力があった場合、N列に日付と時間を表示 です。 Private Sub Worksheet_Change(ByVal Target As Range) Dim r As Integer, c As Integer 'r 行番号 'C 列番号 r = Target.Row c = Target.Column If Target.Count > 1 Then Exit Sub If c <> 13 Or r < 6 Or r > 31 Then End If Cells(r, c) <> "" Then If c = 13 Then Cells(r, c + 1) = Format(Now, "m/d hh:mm") Else Cells(r, c + 1) = "" End If If Target.Count > 1 Then Exit Sub If c <> 4 Or r < 6 Or r > 31 Then End If Cells(r, c) <> "" Then If c = 4 Then Cells(r, c + 3) = Format(Now, "m/d hh:mm") Else Cells(r, c + 3) = "" End If End Sub 作っているうちに、どこがおかしいのかわからなくなってしまいました。 助けて頂ければと思います。

  • エクセルVBA 日付つきバックアップファイル

    下記のような連番でバックアップファイルを作成するマクロを書きました。バックアップファイルの最上部に行を挿入し、そこにバックアップファイルの作成日とオリジナルのFullName(フルパス)を記したいのですがうまくいきません。 .Range("a1") = "保存時刻 : " & Format(Now, "yyyy年mm月dd日hh時nn分") .Range("a2") = "オリジナル : " & ActiveWorkbook.FullName ↑のような感じの情報を加えたいのです。 どなたか、下記のマクロにフルパスと作成日を付与し、マクロ実行後も作業中のブックをアクティブのままにして置く方法をおしえてください。 Sub MySave2() Dim FSO As New Scripting.FileSystemObject バックアップファイル名 = "C:\My Documents\エクセルBackUps\" & Format(Date, "yyyymmdd") _ & ActiveWorkbook.Name If FSO.FileExists(バックアップファイル名) = False Then ActiveWorkbook.SaveCopyAs バックアップファイル名 Else Dim indn As Variant For indn = 2 To 1000 新 = "C:\My Documents\エクセルBackUps\" & Format(Date, "yyyymmdd") _ & "-" & indn & ActiveWorkbook.Name If FSO.FileExists(新) = False Then ActiveWorkbook.SaveCopyAs 新 Exit For Else End If Next indn End If End Sub

  • JAVA  ログファイル名について

    現在、ログファイル用ディレクトリを出力する際に、ログファイル名用日付フォーマットを使用し、処理日付時間の形式で表示させるように設定しています。 SimpleDateFormat resultDirFormatter = new SimpleDateFormat("yyyyMMddhhmmss"); String today = resultDirFormatter.format(cal.getTime()); if (doWriteDetails) { File dir = new File("./result/TableDiffDetails/" + today); dir.delete(); dir.mkdirs(); } これを、日付+番号で作成されるようにしたいのです。 20060124072252 を 20060124_01 にしたい。 同じ日に作成された場合は、番号が1ずつ更新される。 01 02 03 ・・・・・・ 現在、サーブレット上で作成しています。 以上、宜しくお願致します。

  • ファイル名に日付・時刻を付与したい

    Cプログラミングの経験はあるのですがperlのソースを初めて 改造することになりました。 変数「$i」にはシェルのファイル名が入ります。 #FS000.csh このファイル名に日付・時刻を付与して、 FS000mm(月)dd(日)hh(時)mm(分)ss(秒).csh というファイル名にしたいのですが、どうしたらいいのでしょうか?? C言語だったら、配列を宣言して、その配列にファイル名を格納、という 書き方をしようかと思うのですが、 perlでの書き方がさっぱりわかりません・・・。 変数(C言語では配列)を定義したりしなくてもいいのでしょうか? わかりにくい質問ですみませんがどうか宜しくお願いします!

    • ベストアンサー
    • Perl
  • 日付時間をファイル名にしたいが…。

    コマンドプロンプトからログファイルを作成しようとしています。 ファイル名の後に日付・時間をつけて TEST_YYYYMMDD_HHMMSS.log形式にしたいと思っています。 (例:TEST_20050118_120000.log) それで、ファイル名を以下のように指定したのですが TEST_%date:~2,4%%date:~7,2%%date:~10,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log これだと、0時~9時の間は TEST_20050118_ 90000.log のように時間の頭ヒトケタが空白になってしまうらしく、 実行させてもエラーになってしまいます. なにか良い方法がありますでしょうか。 よろしくご教授お願いいたします。

専門家に質問してみよう