Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将字符串和布尔写入文本文件(逗号分隔)_C#_Winforms - Fatal编程技术网

C# 如何将字符串和布尔写入文本文件(逗号分隔)

C# 如何将字符串和布尔写入文本文件(逗号分隔),c#,winforms,C#,Winforms,我正在尝试制作一个winform应用程序。该应用程序有两个文本框(firstName、lastName)、一个numericUpDown和一个复选框。该应用程序能够读取带有逗号分隔行的文本文件(Daniel,Brown,26,true)。应用程序将此信息放入列表框中。然后您可以添加一个新用户。添加完用户后,按save,lisbox中的新信息将保存在该文本文件中。我已经创建了读取文件脚本并成功地添加了用户。但是,我不能创建保存用户按钮以便保存:Daniel,Brown,26岁,true。我能储蓄为

我正在尝试制作一个winform应用程序。该应用程序有两个文本框(firstName、lastName)、一个numericUpDown和一个复选框。该应用程序能够读取带有逗号分隔行的文本文件(Daniel,Brown,26,true)。应用程序将此信息放入列表框中。然后您可以添加一个新用户。添加完用户后,按save,lisbox中的新信息将保存在该文本文件中。我已经创建了读取文件脚本并成功地添加了用户。但是,我不能创建保存用户按钮以便保存:Daniel,Brown,26岁,true。我能储蓄为:丹尼尔,布朗,26岁,快乐。 以下是Person类:

public class Person
{        
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Age { get; set; }
    public bool IsHappy { get; set; }

    public override string ToString()
    {
        var statusText = IsHappy ? "happy" : "not happy";
        return $"{FirstName} {LastName} is {Age} and is {statusText}";
    }   
}
下面是form.cs及其脚本:

public partial class ChallengeForm : Form
{
    private BindingList<Person> _persons = new BindingList<Person>();
    private PersonsService _personsService;

    public ChallengeForm()
    {
        _personsService = new PersonsService();
        InitializeComponent();
        WireUpDropDown();            
    }

    private void WireUpDropDown()
    {
        _persons = new BindingList<Person>(_personsService.GetPersons(@"C:\Users\user\Desktop\Document.TXT"));
        usersListBox.DataSource = _persons;
    }

    private void addUserButton_Click(object sender, EventArgs e)
    {
        var person = new Person { FirstName = firstNameText.Text, LastName = lastNameText.Text, Age = agePicker.Text, IsHappy = isHappyCheckbox.Checked };
        _persons.Add(person);
    }

    private void saveListButton_Click(object sender, EventArgs e)
    {
    }
}
public分部类ChallengeForm:Form
{
private BindingList_persons=new BindingList();
私人人事服务(personservice);;
公共挑战者表单()
{
_personsService=新的personsService();
初始化组件();
WireUpDropDown();
}
私有void wirelupdropdown()
{
_persons=新绑定列表(_personsService.GetPersons(@“C:\Users\user\Desktop\Document.TXT”);
usersListBox.DataSource=\u个人;
}
私有void addUserButton_单击(对象发送者,事件参数e)
{
var person=new person{FirstName=firstNameText.Text,LastName=lastNameText.Text,Age=agePicker.Text,IsHappy=isHappyCheckbox.Checked};
_人。添加(人);
}
private void saveListButton_单击(对象发送者,事件参数e)
{
}
}
我的问题是如何将状态转换回bool。并将列表框作为csv写入文本文件。如果您能使用SoC,我将非常感激。 以下是我尝试过的:

const string sPath = (@"C:\Users\user\Desktop\Document.TXT");

        System.IO.StreamWriter SaveFile = new System.IO.StreamWriter(sPath);
        SaveFile.Write(myperson);
        foreach (var item in usersListBox.Items)
        {

            List<string> unwantedWords = new List<string> { "is", "and" };
            var linesSplitted = item.ToString().Split(' ').ToList();
            var wordsWithoutUnwantedWords = linesSplitted.Where(i => !unwantedWords.Contains(i)).ToList();
            for (int i = 0; i<wordsWithoutUnwantedWords.Count; i++)
            {
                var isLastWord = i == wordsWithoutUnwantedWords.Count - 1;

            SaveFile.Write(wordsWithoutUnwantedWords[i]);

                if (!isLastWord)
                {
                    SaveFile.Write(",");
                }
const string sPath=(@“C:\Users\user\Desktop\Document.TXT”);
System.IO.StreamWriter SaveFile=新的System.IO.StreamWriter(sPath);
SaveFile.Write(myperson);
foreach(usersListBox.Items中的var项)
{
List unwantedWords=新列表{“is”,“and”};
var linessplitt=item.ToString().Split(“”).ToList();
var wordswithoutuntentedwords=linessplited.Where(i=>!unwantedWords.Contains(i)).ToList();

对于(int i=0;i查看XML序列化。您只需传入文件路径和对象,其余将由序列化类完成。代码如下:

这是来自DeadlyDog令人敬畏的回答:

//
///将给定对象实例写入XML文件。
///只有公共属性和变量将被写入文件。但这些可以是任何类型,甚至是其他类。
///如果存在不希望写入文件的公共属性/变量,请使用[XmlIgnore]属性对其进行修饰。
///对象类型必须具有无参数构造函数。
/// 
///正在写入文件的对象的类型。
///要将对象实例写入的文件路径。
///要写入文件的对象实例。
///如果为false,则文件已存在时将被覆盖。如果为true,则内容将附加到文件中。
公共静态void WriteToXmlFile(字符串文件路径,T objectToWrite,bool append=false),其中T:new()
{
TextWriter=null;
尝试
{
var serializer=newxmlserializer(typeof(T));
writer=newstreamwriter(文件路径,追加);
serializer.Serialize(writer,objectToWrite);
}
最后
{
if(writer!=null)
writer.Close();
}
}
/// 
///从XML文件读取对象实例。
///对象类型必须具有无参数构造函数。
/// 
///要从文件中读取的对象的类型。
///从中读取对象实例的文件路径。
///返回从XML文件读取的对象的新实例。
公共静态T ReadFromXmlFile(字符串文件路径),其中T:new()
{
TextReader=null;
尝试
{
var serializer=newxmlserializer(typeof(T));
reader=新的StreamReader(文件路径);
返回(T)序列化程序。反序列化(读取器);
}
最后
{
if(读卡器!=null)
reader.Close();
}
}
示例用例:

WriteToXmlFile<Person>("C:\someClass.txt", objectToSerialize);

// Read the file contents back into a variable.
Person deserializedObject = ReadFromXmlFile<Person>("C:\someClass.txt");
WriteToXmlFile(“C:\someClass.txt”,objectToSerialize);
//将文件内容读回变量。
Person deserializedObject=ReadFromXmlFile(“C:\someClass.txt”);

将列表框写入文本文件
,请向我们展示您所做的尝试。此外,由于您有一个绑定到控件的
人员列表,因此编写此列表要容易得多。序列化
\u人员
列表(在本例中转换为逗号分隔的字符串)(无需使用
ToString()
method,当然)。可以添加另一个公共方法,该方法返回已转换为逗号分隔字符串的属性值。与您在
ToString()
中的操作类似,但面向CSV:)或者考虑JSON来序列化/反序列化你的类对象。你应该显示的代码在 >中。A将从那里开始,有成功读取文件的代码和写文件的尝试。边注:这可能是关于写CSV文件的十几个问题的复制品。这是不可能的。要知道是什么原因,因为我们看不到您尝试了什么。进行更多搜索。只需编辑,最后您就可以看到我尝试了什么。问题就在这里:您正在使用
ToString
的结果作为CSV输出的基础。直接使用属性。除其他好处外,对
ToString
应该返回的内容的更改不会返回因为你必须改变你的CSV例程。更好的是,使用一个经过验证的库,比如。
WriteToXmlFile<Person>("C:\someClass.txt", objectToSerialize);

// Read the file contents back into a variable.
Person deserializedObject = ReadFromXmlFile<Person>("C:\someClass.txt");