Member 12652642 Ответов: 1

Как читать и удалять текст в C#?


Я читал свою книгу по программированию и видел онлайн-примеры, тем не менее, я не могу заставить ее работать. Я могу удалить его из списка нормально, но он не удалит его из фактического txt-файла. Более того, он вообще не будет читать.

Что я уже пробовал:

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 TripCostCalculator
{
    public partial class Form1 : Form
    {
        private const string dir = @"C:\C# 2015\Files\";
        private const string path = dir + "PayCheckCalculator.txt";
        decimal tax = .06m;
        
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            StreamReader textIn =
             new StreamReader(
             new FileStream(path, FileMode.OpenOrCreate, FileAccess.Read));
            textIn.Close();
        }
        private void btnCalculate_Click(object sender, EventArgs e)
        {
            string name = txtName.Text;
            decimal dph;
            decimal grossIncome;
            decimal netIncome;

            if (!decimal.TryParse(txtDph.Text, out dph))
            {
                MessageBox.Show("Please enter a valid dollar amount");
                return;
            }
            decimal hoursWorked;
            if (!decimal.TryParse(txtHoursWorked.Text, out hoursWorked))
            {
                MessageBox.Show("Please enter a valid dollar amount");
                return;
            }
            grossIncome = dph * hoursWorked;
            txtGrossIncome.Text = grossIncome.ToString("c");
            netIncome = grossIncome - (grossIncome * tax);
            txtNetIncome.Text = netIncome.ToString("c");

           
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            for (int v = 0; v < lstSalary.SelectedItems.Count; v++)
            {
                lstSalary.Items.Remove(lstSalary.SelectedItems[v]);
            }
            if (System.IO.File.Exists(@"C:\C# 2015\Files\"))
            {
                System.IO.File.Delete("PayCheckCalculator.txt");
            }
           
        }

      
        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {

            lstSalary.Items.Add(txtName.Text);
            lstSalary.Items.Add(txtDph.Text);
            lstSalary.Items.Add(txtHoursWorked.Text);
            lstSalary.Items.Add(txtGrossIncome.Text);
            lstSalary.Items.Add(txtNetIncome.Text);

        }

        private void btnSave_Click_1(object sender, EventArgs e)
        {
            StreamWriter textOut = new StreamWriter(
             new FileStream(path, FileMode.OpenOrCreate | FileMode.Append, FileAccess.Write));



            textOut.Write(txtName.Text + ",");
            textOut.Write(txtDph.Text + ",");
            textOut.Write(txtHoursWorked.Text + ",");
            textOut.Write(txtGrossIncome + ",");
            textOut.Write(txtNetIncome.Text + ",");

            textOut.Close();

            txtName.Clear();
            txtDph.Clear();
            txtHoursWorked.Clear();
            txtGrossIncome.Clear();
            txtNetIncome.Clear();
        
    }

        
    }
   
}

David_Wimbley

Вы просто хотите удалить текст из файла? Или вы пытаетесь взять список элементов и перезаписывать файл каждый раз, когда этот список изменяется?

1 Ответов

Рейтинг:
0

BillWoodruff

Добавление к текстовому файлу легко; обновление файла путем удаления произвольных разделов будет беспорядочным. Вот для чего нужны базы данных или использование сериализации/десериализации.

В то время как некоторые люди пытаются сделать текстовый файл своего рода базой данных с произвольным доступом, imho, это пустая трата времени, и это также требует, чтобы вы имели дело с проблемами кодирования текста, символов конца строки и чтобы каждый раздел "виртуальной записи" текстового файла имел одинаковую длину или систематически заключался в квадратные скобки с разделителями начала/конца. Пожалуйста, не ходите туда !

Что происходит в форме.Загрузить событие, в котором вы создаете новый StreamReader, открываете и закрываете файл, но не читаете файл или сохраняете ссылку на поток ? Если это просто для того, чтобы убедиться, что файл существует, то почему бы сначала не проверить, существует ли он ?

private void Form1_Load(object sender, EventArgs e)
{
    if (! File.Exists(path))
    {
        using (FileStream fs = File.Create(path)){}
    }
}
Ваш код не читается, потому что ... хорошо... вы не вызываете никакого кода ... это я вижу ... чтобы прочитать файл ?

Думать о:

a. используйте базу данных в сочетании с некоторым соответствующим элементом управления пользовательского интерфейса, привязанным к ней (DataGridView ?)

... или ...

b. 1 смоделируйте "запись" сотрудника с классом " EmployeePayRecord"

b. 2 Создайте коллекцию экземпляров класса EmployeePayRecord.

c. используйте очень удобные и мощные инструменты сериализации WCF, чтобы сохранить коллекцию в файл по мере необходимости или прочитать ее обратно.

Если вы действительно не хотите использовать базу данных, ознакомьтесь с этой статьей, которая использует XML как простое "хранилище данных" с обычными средствами CRUD: [^].