こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

vb txtファイル名に年月日、日時を追加する方法

こんにちは、現在visual studio 2013 で勉強をしている初心者です。現在CSVデータの取り込みの際、重複した値をtxtファイルに保存しているのですがそのファイル名に「年月日、日時」を追加したいのですがやり方がわかりません。教えていただきたいです。
重複リスト.txt 2019/7/26 10:00みたいなのをイメージしているのですが・・・
以下にソースを貼っておきます。
Private Sub Button1_Click_1(sender As Object, e As EventArgs) Handles Button_torikomi.Click
'OpenFileDialogクラスのインスタンスを作成
Dim ofd As New OpenFileDialog()
Dim strSQL As String = Nothing
Dim DT As New DataTable
Dim clsdb As CLS_db 'クラスの呼び出し SQL接続
clsdb = New CLS_db

'はじめに表示されるフォルダを指定する
ofd.InitialDirectory = "C:\"

'[ファイルの種類]に表示される選択肢を指定する
ofd.Filter = "CSVファイル(*.csv;*.csv)|*.csv;*.csv|すべてのファイル(*.*)|*.*"
'[ファイルの種類]ではじめに選択されるものを指定する
'2番目の「すべてのファイル」が選択されているようにする
ofd.FilterIndex = 0
'タイトルを設定する
ofd.Title = "開くファイルを選択してください"
'ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする

ofd.RestoreDirectory = True
ofd.CheckFileExists = True
ofd.CheckPathExists = True

'ダイアログを表示する
If ofd.ShowDialog() = DialogResult.OK Then


'OKボタンがクリックされたとき、選択されたファイル名を表示する
Console.WriteLine(ofd.FileName)

Dim sr As New System.IO.StreamReader(ofd.FileName, _
System.Text.Encoding.GetEncoding("shift_jis"))



'内容を一行ずつ読み込む
Dim sw As String = sr.ReadLine()
While sr.Peek() > -1
Dim s As String = sr.ReadLine()

Dim parts As String()
parts = Split(s, ",")

strSQL = "SELECTカナ氏 FROM 従業員登録 WHERE 従業員コード = " & parts(0) & ""

'重複処理
DT = clsdb.GetDataTable(strSQL)
If DT.Rows.Count > 0 Then

'Shift JISで書き込む
Dim swt As New System.IO.StreamWriter("C:\test\重複リスト.txt", _
True, _
System.Text.Encoding.GetEncoding("shift_jis"))


'重複リスト.txtの内容を書き込む()
swt.Write(parts(0))
swt.Write(","c)
swt.Write(parts(1))
swt.Write(","c)
swt.Write(parts(2))
swt.Write(","c)
swt.Write(parts(3))
swt.Write(","c)
swt.Write(parts(4))
swt.Write(","c)
swt.Write(parts(5))
swt.Write(","c)
swt.Write(parts(6))
swt.Write(","c)
swt.Write(parts(7))
swt.Write(","c)
swt.Write(parts(8))
swt.Write(","c)
swt.WriteLine(parts(9))
'閉じる()
swt.Close()

Else
strSQL = "INSERT INTO 従業員登録(従業員コード,カナ氏,カナ名,氏,名,性別,生年月日,入社日,部署,PASSWORD) VALUES ( '" & parts(0) & "','" & parts(1) & "','" & parts(2) & "','" & parts(3) & "','" & parts(4) & "','" & parts(5) & "','" & parts(6) & "','" & parts(7) & "', '" & parts(8) & "','" & parts(9) & "')"

Try
clsdb.Execute(strSQL)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If

MsgBox(strSQL)

End While
'閉じる
sr.Close()


If DT.Rows.Count > 0 Then
MsgBox("従業員コードが同じです", MessageBoxIcon.Warning, "重複エラー")
Else
MsgBox("追加しました。", MessageBoxIcon.Asterisk, "追加")
End If


End If
'更新テーブル再読み込み 'SQL構文を指定します。
strSQL = "select * from 従業員登録"

'即反映
Try
clsdb = New CLS_db
DT = clsdb.GetDataTable(strSQL)

'データグリッドビューのデータソースを設定
Me.DataGridView1.DataSource = DT

Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
DataGridView1.ReadOnly = True

'元に戻す
Me.Cursor = Cursors.Default

End Sub
End Class

投稿日時 - 2019-07-26 10:08:02

QNo.9639277

困ってます

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

ファイル名には、スラッシュやコロンは使用できません。
また、拡張子の後に日付文字列を追加するのは、拡張子が変化するので避けた方が良いです。

下記のような、拡張子の前に(ピリオドの前に)日付文字列を負荷する方法はどうですか?

Dim dt1 As DateTime = System.DateTime.Now
Dim dt2 As String = dt1.ToString("-yyyyMMddHHmm")
'Shift JISで書き込む
Dim fileName As String = "C:\test\重複リスト" & dt2 & ".txt"
Dim swt As New System.IO.StreamWriter(fileName, _
True, _
System.Text.Encoding.GetEncoding("shift_jis"))

投稿日時 - 2019-07-26 18:49:47

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

こんな感じで現在時刻dt1を取得して,それを文字列dt2に変換してやれば,ファイル名の一部として追加するのは簡単だよね。dt3とかdt4の短い形式を使ってもよい。
Dim dt1 As DateTime = System.DateTime.Now
Dim dt2 As String = dt1.ToString()
Dim dt3 As String = dt1.ToShortDateString()
Dim dt4 As String = dt1.ToShortTimeString()

投稿日時 - 2019-07-26 10:48:07

あなたにオススメの質問