更新行时编辑文本文件

时间:2018-11-21 02:51:54

标签: c#

我能够读取我的文本文件,但是当我单击编辑按钮时,它将文本文件中的所有当前行移动到第一行,并且不进行任何更新。另外,如何在不移动行的情况下将行添加到文本文件中?

private void btnEdit_Click(object sender, EventArgs e)
{
  BugTrackers cs = Bugs[index];
  // DisplayBugs();
  // Update datafile
  UpdateBugsInfo();
}
private void UpdateBugsInfo()
{
  if (lstBugs.SelectedIndex > -1)
  {
    System.IO.StreamWriter sw = new System.IO.StreamWriter("smBugs.txt", false);
    for (int i = 0; i <= Bugs.Count - 1; i++)
    {
      sw.Write(Bugs[i].BugsName);
      sw.Write(",");
      sw.Write(Bugs[i].BugsDesc);
    }
    sw.Close();
  }
}

2 个答案:

答案 0 :(得分:0)

您创建的StreamWriter对象的 append 参数值错误。您需要将其设置为true或删除该参数,因为它的默认值为true

System.IO.StreamWriter sw = new System.IO.StreamWriter("smBugs.txt", true);

OR

System.IO.StreamWriter sw = new System.IO.StreamWriter("smBugs.txt");

这是Microsoft的链接。

https://docs.microsoft.com/en-us/dotnet/api/system.io.streamwriter.-ctor?view=netframework-4.7.2#System_IO_StreamWriter__ctor_System_String_System_Boolean_

您还没有使用using语句,该语句确保不再需要将StreamWriter对象从内存中删除。请仔细阅读本文以更好地理解它。

https://www.dotnetperls.com/streamwriter

希望这会有所帮助!

答案 1 :(得分:0)

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;


namespace BugTracker
{
    struct BugTrackers
    {
        public string BugsName;
        public string BugsDesc;

    }

    public partial class YoungKidsBugTracker : Form
    {
        // Field to hold a list of BugTrackers objects
        private List<BugTrackers> Bugs = new List<BugTrackers>();
        private int index; // index fo selected bugs in combobox

        public YoungKidsBugTracker()
        {
            InitializeComponent();
        }

        private void ReadFile()
        {
            try
            {
                //Declare a varialble to hold Bugs Name
                StreamReader inputFile;   // To Read the file
                string line;              // To hold a line from the file

                // Create an instance of the Bug Accounts
                BugTrackers entry = new BugTrackers();

                // Create a delimeter array
                char[] delim = { ',' };

                // Open the file and get a StreamReader Object
                inputFile = File.OpenText("smBugs.txt");

                // Read the file's contents
                while (!inputFile.EndOfStream)
                {
                    // Read a line from the file
                    line = inputFile.ReadLine();

                    // Tokenize the line
                    string[] tokens = line.Split(delim);

                    // Stores the tokens in the entry object
                    entry.BugsName = tokens[0];
                    entry.BugsDesc = tokens[1];

                    // Add the entry object to the combobox
                    Bugs.Add(entry);
                }
                // Close the File
                inputFile.Close();
            }
            catch (Exception ex)
            {
                // Display an error message
                MessageBox.Show(ex.Message);
            }
        }

        private void lstBugs_SelectedIndexChanged(object sender, EventArgs e)
        {
            // Get the index of the sselected item
            index = lstBugs.SelectedIndex;

            // Display Bug Information
            DisplayBugs();
        }

        private void DisplayBugs()
        {
            //Show Data
            txtBugsName.Text = Bugs[index].BugsName;
            rtxtBugDesc.Text = Bugs[index].BugsDesc.ToString();
        }

        private void YoungKidsBugTracker_Load(object sender, EventArgs e)
        {
            // Read the Bugs.txt file
            ReadFile();

            // Display Bug Information
            BugNameDisplay();
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            BugTrackers cs = Bugs[index];
           // DisplayBugs();
            // Update datafile
            UpdateBugsInfo();
        }
        private void UpdateBugsInfo()
        {
            if (lstBugs.SelectedIndex > -1)
            {
                System.IO.StreamWriter sw = new System.IO.StreamWriter("smBugs.txt");

                for (int i = 0; i <= Bugs.Count - 1; i++)
                {
                    sw.Write(Bugs[i].BugsName);
                    sw.Write(",");
                    sw.WriteLine(Bugs[i].BugsDesc);
                   // sw.Write(Environment.NewLine);
                }
                sw.Close();
            }
        }

        private void BugNameDisplay()
        {
            // Display the list of Bug Names in the List Control
            foreach (BugTrackers entry in Bugs)
            {
                lstBugs.Items.Add(entry.BugsName );
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {

        }


    }
}

这是完整的代码。我有一个带有2个文本框的列表框,其中包含错误名称和描述。我有3个按钮,添加,编辑和删除。如果从列表框中选择了一个项目,它将显示错误名称和描述。如果条目需要更新,则会进行更改,并将更改所需的信息。如果添加了新的错误,则可以使用与删除按钮相同的添加按钮。