繁体   English   中英

更新行时编辑文本文件

[英]Editing text file when updating row

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

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();
  }
}

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

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

要么

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

希望这可以帮助!

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个按钮,添加,编辑和删除。 如果从列表框中选择了一个项目,它将显示错误名称和描述。 如果条目需要更新,则会进行更改,并将更改所需的信息。 如果添加了新的错误,则可以使用与删除按钮相同的添加按钮。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM