VB.netで上書き保存するには

解決


初心者質問者  2003-08-24 02:14:18  No: 108209

VB.netでテキストエディタ(Vector記載申請予定)を作ろうとしています。質問は題の通りです。一応過去ログを見たら同じようなものがあったのですが、それはVB6のコードでOpenfiledialogがなかったりといろいろ違っていて初心者の私にはさっぱりでした。是非、VB.netでの上書き保存の仕方をご教授願います。また、Newというコマンドを使ってメモ帳の日付と時刻を真似しようとしたのですが、文章がすべて消えてしまいます。どうすればいいでしょうか。


岡田 之仁  2003-08-24 06:09:00  No: 108210

ファイルの入出力より、.NETの内容がおわかりになっていないので、かなり
苦労されるとは思いますが・・・

ファイル関係は、
FileStream
StreamReader
StreamWriter
のクラスをご参照下さい。

尚、テキストエディターと言うことであれば、文字コードのエンコード・
デコード関係も必要になると思いますが・・・Encodingクラスもご参照
下さい。

以上。


岡田 之仁  2003-08-24 06:10:31  No: 108211

それと・・・

> Newというコマンドを使ってメモ帳の日付と時刻を真似しようとした
> のですが、文章がすべて消えてしまいます。どうすればいいでしょうか。

意味が解りません。
具体的にどうしようとされたのか、また実質のコードを記載して頂ければ
対策も可能なのですが・・・

以上。


初心者質問者  2003-08-24 07:36:06  No: 108212

意味のわからない文章を書いてしまって申し訳ございませんでした。
コードを記述しました。日付と時刻の欄を見てください。
たとえば、テキストエディタに文章が書いてある時に日付と時刻のコマンドを実行すると、もともと書いてあった文章に上書きされて日付と時刻が表示されてしまうということです。
また、その他で効率が悪い記述などがありましたら、ご指摘願います。

    '終了
    Private Sub mimExit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimExit.Click
        Application.Exit()
    End Sub

    '新規作成
    Private Sub mimNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimNew.Click
        txtWrite.Clear()
    End Sub

    '開く
    Private Sub mimOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimOpen.Click

        '宣言
        Dim d As DialogResult
        Dim tempData As String
        Dim readData As String
        Dim i As Integer

        'ダイアログを表示してファイルを選択
        d = OpenFileDialog.ShowDialog()
        If d = DialogResult.Cancel Then
            Exit Sub
        End If

        'ファイルを開く
        i = FreeFile()
        FileOpen(i, OpenFileDialog.FileName, OpenMode.Input)

        'データの読み込み
        Do Until EOF(i)
            tempData = LineInput(i)
            readData = readData & tempData & vbNewLine
        Loop
        txtWrite.Text = readData

        'ファイルを閉じる
        FileClose(i)

    End Sub

    '保存
    Private Sub mimSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimSave.Click

        '宣言
        Dim i As Integer
        Dim d As DialogResult

        'ダイアログを表示してファイルを選択
        d = SaveFileDialog.ShowDialog()
        If d = DialogResult.Cancel Then
            Exit Sub
        End If

        'ファイルを開く
        i = FreeFile()
        FileOpen(i, SaveFileDialog.FileName, OpenMode.Output)

        'データの書き込み
        Print(i, txtWrite.Text)

        'ファイルを閉じる
        FileClose(i)

    End Sub

    '印刷情報
    Private Sub mimPrint_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimPrint.Click

        '宣言
        Dim d As DialogResult

        '印刷ダイアログの表示
        d = PrintDialog.ShowDialog()
        If d = DialogResult.OK Then
            '印刷を開始
            PrintDocument.Print()
        End If

    End Sub

    '印刷ルール1
    Private Sub PrintDocument_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument.PrintPage

        '描画
        e.Graphics.DrawString(txtWrite.Text, txtWrite.Font, Brushes.Black, 0, 0)

    End Sub

    '印刷ルール2
    Private Sub frmNicelookmemo_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        PrintDialog.Document = PrintDocument
    End Sub

    'フォントダイアログの表示
    Private Sub mimFont_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimFont.Click

        '宣言
        Dim d As DialogResult

        'フォントダイアログの表示
        d = FontDialog.ShowDialog
        If d = DialogResult.Cancel Then
            Exit Sub
        End If

        'フォントと色の変更
        txtWrite.Font = FontDialog.Font
        txtWrite.ForeColor = FontDialog.Color

    End Sub

    '文字数表示
    Private Sub mimMojisu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimMojisu.Click

        '宣言
        Dim m As String

        '文字数ダイアログの表示
        m = txtWrite.Text
        MessageBox.Show("文字数:" & Len(m) & "文字", "文字数", MessageBoxButtons.OK, MessageBoxIcon.Information)

    End Sub

    '日付と時刻
    Private Sub mimDatetime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimDatetime.Click
        txtWrite.Text = Now
    End Sub

    'バックカラー(白)
    Private Sub mimWhite_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimWhite.Click
        txtWrite.BackColor = Color.White
        txtWrite.ForeColor = Color.Black
    End Sub

    'バックカラー(黒)
    Private Sub mimBlack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimBlack.Click
        txtWrite.BackColor = Color.Black
        txtWrite.ForeColor = Color.White
    End Sub
End Class


Take1  2003-08-24 17:58:34  No: 108213

'日付と時刻
>Private Sub mimDatetime_Click(ByVal sender As System.Object, ByVal 
>e As System.EventArgs) Handles mimDatetime.Click
>        txtWrite.Text = Now
>    End Sub

txtWrite.Text = Now は txtWrite.Text になにが記入されてても
日付時間だけを記入します。
txtWrite.Text に Now を追加するのは & 
改行するならvbNewLineですね。
あと一息。


初心者質問者  2003-08-24 20:11:28  No: 108214

Take1さん。コードを下のように書き換えることで問題解決しました。

'日付と時刻
    Private Sub mimDatetime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimDatetime.Click
        Dim t As String
        t = txtWrite.Text
        txtWrite.Text = t & Now
    End Sub
岡田さん、参照してみました。
>ファイル関係は、
>FileStream
>StreamReader
>StreamWriter
>のクラスをご参照下さい。
>尚、テキストエディターと言うことであれば、文字コードのエンコード・
>デコード関係も必要になると思いますが・・・Encodingクラスもご参照
>下さい。
どうやら私の場合、Openfiledialogに依存してしまっているように思えます。
どちらでやるほうが、より効率がよいのでしょうか?また、現在の私のやり方でも、上書き保存できますか?ご教授ください。

p.s  なにぶん初心者なものでわけのわからない発言などがあるかもしれません。
もし、そのような発言があったら是非ご指摘ください。


岡田 之仁  2003-08-24 21:53:51  No: 108215

先に解決した部分もあろうかと思いますが、修正した部分のソースを掲載
します。

※  VB6から継承されて実際に使えるコマンドやステートメントも多数
    ありますが、今後のことを考え、すべてVB.NETの方の機能を、
    お使いになる方が良いと思います。

Imports System.IO

    '開く
    Private Sub mimOpen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimOpen.Click

        '宣言
        Dim d As DialogResult
        Dim sr As StreamReader

        'ダイアログを表示してファイルを選択
        d = OpenFileDialog.ShowDialog()
        If d = DialogResult.Cancel Then
            Exit Sub
        End If

        'ファイルを開く
        sr = New StreamReader(OpenFileDialog.FileName)

        'データの読み込み
        txtWrite.Text = sr.ReadToEnd

        'ファイルを閉じる
        sr.Close()

    End Sub

    '保存
    Private Sub mimSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimSave.Click

        '宣言
        Dim i As Integer
        Dim d As DialogResult
        Dim sw As StreamWriter

        'ダイアログを表示してファイルを選択
        d = SaveFileDialog.ShowDialog()
        If d = DialogResult.Cancel Then
            Exit Sub
        End If

        'ファイルを開く
        sw = New StreamWriter(SaveFileDialog.FileName)

        'データの書き込み
        sw.Write(txtWrite.Text)

        'ファイルを閉じる
        sw.Close()

    End Sub

    '文字数表示
    Private Sub mimMojisu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimMojisu.Click

        '宣言
        Dim l As Long

        '文字数ダイアログの表示
        l = txtWrite.Text.Length
        MsgBox("文字数:" & l.ToString & "文字", MsgBoxStyle.Information + MsgBoxStyle.OKOnly, "文字数")

    End Sub

    '日付と時刻
    Private Sub mimDatetime_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mimDatetime.Click

        txtWrite.Text = txtWrite.Text + DateTime.Now.ToShortDateString + " " + DateTime.Now.ToShortTimeString + " "

    End Sub

●  やはりこの中で、問題になるのが、読み込みたい、もしくは保存する
    場合のテキストファイルの文字コードです。

    この修正を実行して頂きますと、漢字が混ざっているテキストを読ん
    だり保存したりしますと、他のソフト(メモ帳等)で開きますと、文
    字部分(全角)がバケてしまっていることが解ります。

    先のStreamクラス関係の部分で、ファイルを開く時、保存する時に、
    文字コード体系を指定することができます。

    そこは頑張ってみられては?

以上。


初心者質問者  2003-08-24 23:30:30  No: 108216

岡田さん、レスありがとうございます。がんばってみます。
確か、.netはmessagebox.showでMsgboxはVB6(どっちでも使えますが…)ではなかったでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加