سؤال

أنا جديد على Visual Basic.net وأنا فقط ألعب معها. لديّ كتاب يخبرني بكيفية القراءة من ملف ولكن ليس كيفية الكتابة إلى الملف بنقرة زر. كل ما لدي هو زر ومربع نص يسمى FullNameBox. عندما أقوم بالنقر فوق الزر ، فإنه يعطيني خطأ استثناء غير معتمد. ها هو رمزتي:

Public Class Form1
    Sub outputFile()
        Dim oWrite As System.IO.StreamWriter
        oWrite = System.IO.File.CreateText("C:\sample.txt")
        oWrite.WriteLine(fullNameBox.Text)
    End Sub
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        outputFile()
    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

    End Sub
End Class
هل كانت مفيدة؟

المحلول

هل حاولت التنقل عبر تطبيقك لمعرفة أين يوجد الخطأ؟ مع لمحة سريعة ، يبدو أنك قد تحتاج إلى استخدام System.io.io على السطر الرابع (Owrite = io.file ...) بدلاً من IO فقط ، لكنني لم أحاول تشغيله.

نصائح أخرى

Imports System.IO
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        SaveFileDialog1.FileName = ""
        SaveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        SaveFileDialog1.ShowDialog()
        If SaveFileDialog1.FileName.Trim.Length <> 0 Then
            Dim fs As New FileStream(SaveFileDialog1.FileName.Trim, FileMode.Create)
            Dim sr As New StreamWriter(fs)
            sr.Write(TextBox1.Text)
            fs.Flush()
            sr.Close()
            fs.Close()
        End If
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        OpenFileDialog1.FileName = ""
        OpenFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*"
        OpenFileDialog1.ShowDialog()
        If OpenFileDialog1.FileName.Trim.Length <> 0 Then
            Dim fs As New FileStream(OpenFileDialog1.FileName.Trim, FileMode.Open)
            Dim sw As New StreamReader(fs)
            TextBox1.Text = sw.ReadToEnd
            fs.Flush()
            sw.Close()
            fs.Close()

        End If
    End Sub
End Class

هذا برنامج وظيفي كامل إذا كنت تريد ، فأنت بحاجة فقط إلى سحب مربع النص ، OpenFileDialog ، و SaveFileDialog. لا تتردد في اللعب مع الكود. التمتع
بالمناسبة ، تتمثل المشكلة في الكود الخاص بك في أنه "يجب" إغلاق FileStream عند القيام به باستخدامه ، فإن القيام بذلك سيصدر أي مورد مثل المقابس ومقابض الملفات.

إطار .NET هو إطار قوي للغاية. بنفس الطريقة (ومع ذلك) ، فإن لديها طرق سهلة ومريحة للمهام البسيطة. يميل معظم الأفراد إلى تعقيد الأشياء من أجل عرض المعرفة. ولكن كود أقل = أقل معالجة = تطبيق أسرع وأكثر كفاءة (في بعض الأحيان) وبالتالي قد لا تكون الطريقة الكبيرة أعلاه مناسبة. جنبا إلى جنب مع ذلك ، ستكون الطريقة المذكورة أعلاه أفضل حالًا في المكتوبة كباطنة أو إذا كانت تعيد شيء ما ثم وظيفة.

My.Computer.FileSystem.WriteAllText("File As String", "TextAsString", Append as Boolean)

أ جنرال لواء مثال سيكون

My.Computer.FileSystem.WriteAllText("C:\text.text", "this is what I would like to add", False)

هذا ما أود إضافته

يمكن تغييرها إلى النص الحالي للحقل أيضًا.

أكثر من ذلك محدد مثال سيكون

My.Computer.FileSystem.WriteAllText("C:\text.text", fullNameBox.text, True)

إذا كنت ترغب في فهم ألحق جزء من الكود

  • عن طريق ضبط Append = True ، فأنت تسمح لتطبيقك بكتابة النص في نهاية الملف ، تاركًا بقية النص بالفعل في الملف سليمًا.

  • عن طريق ضبط Append = false ، ستقوم بإزالة جميع النص في الملف الموجود مع النص الجديد

إذا كنت لا تشعر بكتابة هذا الجزء من الكود (على الرغم من أنه صغير) ، فيمكنك إنشاء فرع للتعامل معه ، ومع ذلك ستكون هذه الطريقة مختلفة قليلاً ، فقط للآداب. ستظل الوظيفة متشابهة. (استخدام StreamWriter)

Private Sub WriteText()
        Dim objWriter As New System.IO.StreamWriter("file.txt", append as boolean)
        objWriter.WriteLine(textboxname.Text)
        objWriter.Close()
    End Sub

ال محددة مثال سيكون

Private Sub WriteText()
        Dim objWriter As New System.IO.StreamWriter("file.txt", False)
        objWriter.WriteLine(fullnamebox.Text)
        objWriter.Close()
    End Sub

ثم ضمن استدعاء حدث Button_Click:

writetext()

يمكنك اتخاذ هذه الخطوة بالإضافة إلى ذلك أيضًا. إذا كنت ترغب في إنشاء Sub أكثر من Advabced للتعامل مع أي مربع نص وملف.

دعنا نقول أنك تخطط لوجود ملفات منفصلة متعددة وحقول متعددة لكل ملف (على الرغم من أن هناك أ كثيراً طريقة أنظف أكثر أناقة) يمكنك إنشاء وظيفة. {سأشرح المفهوم الكامن وراء الوظيفة قدر الإمكان لهذا المثال}

فيما يلي عرض فرعي أكثر تقدماً لطلبك أعلاه

Private Sub WriteText(Filename As String, app As Boolean, text As String)
        Dim objWriter As New System.IO.StreamWriter(Filename, app)
        objWriter.WriteLine(text)
        objWriter.Close()

End Sub

ما يفعله هذا هو أن يسمح لنا (على نفس النموذج - إذا كنت في حاجة إلى أنه عالمي ، فيمكننا مناقشة هذا الوقت الآخر ، فهو ليس أكثر تعقيدًا على الإطلاق) استدعاء الوظيفة وإدخال المعلومات حسب الحاجة.

الاستخدام الفرعي -> عينة عامة

WriteText(Filename As String, app As Boolean)

الاستخدام الفرعي -> عينة محددة

WriteText("C:\text.txt, False, fullnamebox.text)

ولكن أفضل جزء في هذه الطريقة هو أنه يمكنك تغيير ذلك ليكون أي شيء كما تحتاجه. لنفترض أن لديك زرين*و ** مربعان يمكنك الحصول على button_event لزر الزر الأول يحفز الرمز أعلاه والزر الثاني يؤدي إلى رمز مختلف.

مثال

WriteText("C:\text2.txt, False, halfnamebox.text)

أفضل جزء في إنشاء وظائفك الخاصة والغواصات مراقبة لن أذهب إليه ، لأنه سيكون خارج الموضوع ، ولكن يمكنك التحقق من التأكد من أن مربع النص يحتوي على نص أولاً قبل كتابة الملف. هذا سيحمي سلامة الملفات.

أتمنى أن يساعدك هذا! مواقع ريتشارد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top