Codingnow20 Ответов: 1

Считывание данных из файла *.dat и запись новой строки в тот же файл


У меня есть программа, которая записывает в файл dat каждый раз, когда пользователь вводит новый пароль.Я хочу иметь возможность нумеровать пароли вот так 1|******|папка|2|****|другая папка.Есть ли способ прочитать из файла строку и узнать, сколько подстрок в файле есть, разделить на 3 и использовать это число для следующего пароля? вот код, который его пишет.
              private void buttonclick(object sender,EventArgs e)
         {         int counter;
                  counter = TextBoxs.Count + 1;
                TextBox tb = new TextBox();
                Label labl = new Label();
                Label num = new Label();
                tb.Text = InputText1.Text;
                labl.Text = "folder"+counter;
                num.Text = counter.ToString();
                TextBoxs.Add(tb);
                string currentEntry = num.Text + "|" + tb.Text.Replace("|", "~") + "|" 
             + labl.Text + "|";
                File.AppendAllText("SavedData.dat", currentEntry);
                this.Hide();
           }

and the code that reads it to the second form

  if (File.Exists("SavedData.dat"))
            {
                using (StreamReader sr = new StreamReader("SavedData.dat"))
                {
                  
                  
                    Point newloc = new Point(175,30);
                    Point numloc = new Point(25,30);
                    Point labloc = new Point(60,30);
                    
                  
                 
                    string line = "";
                    while ((line = sr.ReadLine())!=null)
                    {
                        string[] lineData = line.Split('|');
                        if (lineData.Length >= 3)
                        {
                            Label labl = new Label();
                            Label num = new Label();
                            TextBox tb = new TextBox();
                            tb.Enabled = false;
                            string currentnumber = lineData[0];
                            string currentTbText = lineData[1];
                            string currentLablText = lineData[2];
                            labl.Size = label2.Size;
                            tb.Size = passwordtextbox.Size;
                            tb.UseSystemPasswordChar = true;
                            num.Size = label3.Size;
                            num.Location = numloc;
                            tb.Location = newloc;
                            labl.Location =labloc;
                            tb.Text = currentTbText;
                            labl.Text = currentLablText;
                            num.Text = currentnumber;
                            tb.ReadOnly = true;
                            TextBoxes.Add(tb);
                            labels.Add(labl);
                            nums.Add(num);
                            this.Controls.Add(num);
                            this.Controls.Add(tb);
                           this.Controls.Add(labl);
                        }

                        if (lineData.Length >= 6)
                        {
                            Label labl = new Label();
                            Label num = new Label();
                            TextBox tb = new TextBox();
                            tb.Enabled = false;
                            string currentnumber = lineData[3];
                            string currentTbText = lineData[4];
                            string currentLablText = lineData[5];
                            newloc.Offset(0,tb.Height +5);
                            numloc.Offset(0,tb.Height + 5);
                            labloc.Offset(0,tb.Height +5);
                            labl.Size = label2.Size;
                            tb.ReadOnly = true;
                            tb.Size = passwordtextbox.Size;
                            num.Size = label3.Size;
                            tb.UseSystemPasswordChar = true;
                            num.Location = numloc;
                            tb.Location = newloc;
                            labl.Location = labloc;
                            tb.Text = currentTbText;
                            labl.Text = currentLablText;
                            num.Text = currentnumber;
                            TextBoxes.Add(tb);
                            labels.Add(labl);
                            nums.Add(num);
                            this.Controls.Add(num);
                            this.Controls.Add(tb);
                            this.Controls.Add(labl);

What I have tried:

here is the code i have tried
<pre>
                Streamreader s = new Streamreader();
                string d = s.ReadToEnd();
                string e ;
                  string line = "";
                    while ((line = s.ReadLine())!=null)
                   {string[] lineData = line.Split('|');
                    e = (lineData.Count/3).ToString();}
           counter = TextBoxs.Count + 1;
                TextBox tb = new TextBox();
                Label labl = new Label();
                Label num = new Label();
                tb.Text = InputText1.Text;
                labl.Text ="Folder"+counter;
                num.Text = e;
                    TextBoxs.Add(tb);
                string currentEntry = num.Text + "|" + tb.Text.Replace("|", "~") + "|" + labl.Text + "|";
                File.AppendAllText("SavedData.dat", currentEntry);
                this.Hide();}

Gerry Schmitz

К чему все эти глупости с текстовыми полями? Это не имеет никакого отношения к вопросу.

Codingnow20

текстовые поля отображаются во второй форме, и это был единственный способ, которым я мог понять, как это сделать

Mike V Baker

Когда вы запускаете этот код, что вы ожидаете увидеть в currentEntry и что на самом деле заканчивается в currentEntry?
Это пароли? И вы записываете их в текстовый файл? Никакого шифрования? Я предлагаю там переосмыслить ситуацию.

Codingnow20

я пытаюсь понять это, прежде чем пытаться изучать шифрование

1 Ответов

Рейтинг:
1

Richard MacCutchan

Вы читаете все данные из файла, а затем пытаетесь прочитать одну строку:

Streamreader s = new Streamreader();
string d = s.ReadToEnd();   // read all file content into the string d
string e ;
string line = "";
while ((line = s.ReadLine())!=null) // the file is positioned at EOF so nothing to read.

И использование бессмысленных односимвольных имен для ваших переменных не помогает.