C # Сохранение нескольких текстовых полей в один файл .txt - PullRequest
0 голосов
/ 05 декабря 2010

Хорошо, во-первых, я новичок в C # (новичок в программировании), и после довольно продолжительного поиска в Google я не смог найти решение по этому вопросу.

Итак, что мне нужно сделать, это: У меня есть 14 текстовых полей и несколько флажков:

Имя, дата рождения, место рождения и некоторая другая информация, например, об одном человеке ... У меня есть одна кнопка Сохранить, которая сохранит всю эту информацию в одном файле .txt или .rtf. Каждый раз, когда я вводю эту информацию в textBox, она сохраняет ее в виде файла с именем, введенным в textBoxName.

Например:

textBoxName: Petar Milutinovic;
textBoxBirth: 01.11.1991;
textBoxCity: Paracin;

И когда я нажимаю кнопку Сохранить, она сохраняет всю эту информацию в файле с именем Petar Milutinovic (то же имя, что и textBoxName) в этой форме:

Name: Petar Milutinovic;
Date of Birth: 01.11.1991;
City: Paracin;

О, боже ... Мне очень жаль английское правописание, оно не мое главное (вы заметили это ...). Эта проблема была довольно болезненной в эти дни ...

Ответы [ 4 ]

1 голос
/ 05 декабря 2010

Я думаю, что самый простой способ (поскольку вы новичок) - это создать массив строк, который может содержать 14 элементов, поскольку у вас есть 14 текстовых полей.

string[] contents = new string[14];
contents[0] = "Name: " + textBoxName.Text;
contents[1] = "City: " + textBoxCity.Text;
contents[2] = "Date of Birth: " + textBoxBirth.Text;
...

Затем вы можете сохранить его непосредственно в файл с помощью:

System.IO.File.WriteAllLines(textBoxName.Text + ".txt", contents);

Конечно, есть и другие более эффективные способы сделать это, но я думаю, что этот способ наиболее понятен.

(я забыл о ваших флажках, но вы можете достичь той же цели с помощью этой концепции)

EDIT:

Для флажков или переключателей вы можете использовать свойство Checked (или CheckState).

Вы можете сделать что-то вроде:

contents[0] = checkBox.Checked ? "1" : "0";
contents[1] = radioButton.Checked ? "1" : "0";

, где 1 представляет истину, а 0 представляет ложь. Эти значения могут быть любыми, если вы правильно их прочитали.

1 голос
/ 05 декабря 2010

Нужно ли вам иметь возможность читать содержимое текстового файла или это только для хранения? если это последнее, вы можете создать сериализуемый класс, который инкапсулирует все ваши свойства (например, Person, Employee и т. д.) и затем связать эти поля с полями формы. Тогда вам нужно всего лишь сериализовать класс / объект и сохранить его в текстовом файле, вместо того чтобы выполнять sw.Writeline для каждого отдельного поля.

1 голос
/ 05 декабря 2010

Вы можете (должны) сначала создать свойства для каждого из этих полей, например, так:

private string Name
{
    // now you avoid a bunch of references to txtName.Text potentially 
    // throughout your form code.  This makes things more simple if you
    // want to swap out UI elements later on.
    get { return txtName.Text; } 
}

private DateTime DateOfBirth
{
    get { return /*selected date*/; } } 
}

// more properties for each field

Теперь вы просто открываете файл и начинаете писать:

private void WriteDataFile( filepath )
{
    // Note: You should handle potential IO errors in a try/catch block
    using( FileStream fs = File.Open( filepath, FileMode.Create )
    using( StreamWriter sw = new StreamWriter( fs ) )
    {
        sw.WriteLine( String.Format( "Name: {0}", this.Name ) );
        sw.WriteLine( String.Format( "Date of Birth: {0}", this.DateOfBirth ) );
        // etc.
    } 
}
0 голосов
/ 05 декабря 2010

Поскольку вы новичок в программировании в целом, я расскажу вам то, что я должен был услышать, когда был новичком: делать все это ОО (объектно-ориентированным) способом.Когда-нибудь вы будете достаточно продвинуты, чтобы взглянуть на такие вещи, как функциональное программирование, но до тех пор OO - это способ следовать, это очень помогает.

Так что же это за ОО?Ну, все является объектом.

Это означает, что вы создаете Person объект.И как ты это делаешь?Определение Class.

Вот как это работает:

class Person
{
    public Person(string name,
                  string age,
                  string city)
    {
        this.Name = name;
        this.Age = age;
        this.City = city;
    }

    public string Name { get; private set; }
    public string Age { get; private set; }
    public string City { get; private set; }

    public void SerializeToFile()
    {
        //Do the serialization (saving the person to a file) here.
    }
}

Затем (например, в кнопке «Сохранить») вы создаете Person из значений в тексте.поля и сохраните его следующим образом:

private void buttonSave_Click(object sender, EventArgs e)
{
    Person p = new Person(textBoxName.Text,
                          textBoxAge.Text,
                          textBoxCity.Text);
    p.SerializeToFile();
}

Это все может показаться странным, но теперь вы можете делать многие вещи более чистым способом, например, сохраняя человека в базе данных или передавая его в качестве аргумента без беспорядка., фрагментированный и трудно поддерживаемый код.

В качестве идентификатора это также позволяет наследовать:

class Employee : Person
{
    public string Job { get; private set; }
}

Смотрите, этот класс имеет тот же код класса person, но и Job имущество.В качестве бонуса к чистому коду вы можете передать Employee методу, который принимает в качестве аргумента Person, потому что работник "является" человеком.

...