Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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中#_C#_File - Fatal编程技术网

C# 如何列出不同的数据类型,然后保存到文件c中#

C# 如何列出不同的数据类型,然后保存到文件c中#,c#,file,C#,File,我需要得到一个包含不同数据类型的列表,并将它们保存到一个文本文件中。我已经编写了获取变量并生成文件的代码。我不知道如何制作列表,然后保存它 这是我的代码: //Get name. Console.Write("Name:"); string name = Console.ReadLine(); //Get age. Console.Write("Age:"); int age = Convert.ToInt16(Console.ReadLine());

我需要得到一个包含不同数据类型的列表,并将它们保存到一个文本文件中。我已经编写了获取变量并生成文件的代码。我不知道如何制作列表,然后保存它

这是我的代码:

//Get name.
Console.Write("Name:");
string name = Console.ReadLine();

//Get age.
Console.Write("Age:");
int age = Convert.ToInt16(Console.ReadLine());

//Get favorite color.
Console.Write("Favorite color:");
string color = Console.ReadLine();

//Get favorite number.
Console.Write("Favorite number:");
int number = Convert.ToInt16(Console.ReadLine());

//Save to stats.txt
string path = @"C:\Users\max\OneDrive\Desktop\Code\C#\SaveAndLoad\STATS\stats.txt";
using (FileStream makeFile = File.Create(path));

如果要将其另存为文本,可以使用
StreamWriter

使用(StreamWriter sw=新StreamWriter(路径))
{
西南书写线(名称);
西南书写线(年龄);
sw.WriteLine(彩色);
软件写入线(编号);
}
它的行为类似于Console.WriteLine()

要读取,请执行与控制台中相同的操作

使用(StreamReader sr=新的StreamReader(路径))
{
name=sr.ReadLine();
age=int.Parse(sr.ReadLine());
color=sr.ReadLine();
number=int.Parse(sr.ReadLine());
}
或者另一个版本(只是为了好玩)来显示文件的内容

string[]line=File.ReadAllLines(路径);
Console.WriteLine(string.Join(Environment.NewLine,lines));
//您也可以将其加载到变量中
名称=行[0];
age=int.Parse(第[1]行);
颜色=线条[2];
number=int.Parse(第[3]行);

如果要将其另存为文本,可以使用
StreamWriter

使用(StreamWriter sw=新StreamWriter(路径))
{
西南书写线(名称);
西南书写线(年龄);
sw.WriteLine(彩色);
软件写入线(编号);
}
它的行为类似于Console.WriteLine()

要读取,请执行与控制台中相同的操作

使用(StreamReader sr=新的StreamReader(路径))
{
name=sr.ReadLine();
age=int.Parse(sr.ReadLine());
color=sr.ReadLine();
number=int.Parse(sr.ReadLine());
}
或者另一个版本(只是为了好玩)来显示文件的内容

string[]line=File.ReadAllLines(路径);
Console.WriteLine(string.Join(Environment.NewLine,lines));
//您也可以将其加载到变量中
名称=行[0];
age=int.Parse(第[1]行);
颜色=线条[2];
number=int.Parse(第[3]行);
您可以使用

首先,创建一个类来封装数据:

public class Data
{
    public string Name;
    public int Age;
    public string FavoriteColor;
    public int FavoriteNumber;
}
然后,写入和读取文件的示例:

static void Main(string[] args)
{
    Console.Write("Name:");
    string name = Console.ReadLine();

    //Get age.
    Console.Write("Age:");
    int age = Convert.ToInt16(Console.ReadLine());

    //Get favorite color.
    Console.Write("Favorite color:");
    string color = Console.ReadLine();

    //Get favorite number.
    Console.Write("Favorite number:");
    int number = Convert.ToInt16(Console.ReadLine());

    //Save to stats.txt
    string path = @"C:\Users\max\OneDrive\Desktop\Code\C#\SaveAndLoad\STATS\stats.txt";
    Data data = new Data() { Name = name, Age = age, FavoriteColor = color, FavoriteNumber = number };
    using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.OpenOrCreate))
    {
        System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(data.GetType());
        xml.Serialize(fs, data);
    }

    // read from stats.txt into a Data object
    Data data2;
    using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open))
    {
        System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(typeof(Data));
        data2 = xml.Deserialize(fs) as Data;
    }
    // do something with "data2":
    Console.WriteLine("Name: " + data2.Name);
    Console.WriteLine("Age: " + data2.Age);
    Console.WriteLine("Color: " + data2.FavoriteColor);
    Console.WriteLine("Number: " + data2.FavoriteNumber);

    Console.Write("Press Enter to Quit");
    Console.ReadLine();
}
生成的XML文件:

<?xml version="1.0"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Mike</Name>
  <Age>47</Age>
  <FavoriteColor>Blue</FavoriteColor>
  <FavoriteNumber>42</FavoriteNumber>
</Data>

迈克
47
蓝色
42
如果您创建了另一个包含
List
的类,则可以使用非常相似的代码以相同的方式序列化该类。

您可以使用

首先,创建一个类来封装数据:

public class Data
{
    public string Name;
    public int Age;
    public string FavoriteColor;
    public int FavoriteNumber;
}
然后,写入和读取文件的示例:

static void Main(string[] args)
{
    Console.Write("Name:");
    string name = Console.ReadLine();

    //Get age.
    Console.Write("Age:");
    int age = Convert.ToInt16(Console.ReadLine());

    //Get favorite color.
    Console.Write("Favorite color:");
    string color = Console.ReadLine();

    //Get favorite number.
    Console.Write("Favorite number:");
    int number = Convert.ToInt16(Console.ReadLine());

    //Save to stats.txt
    string path = @"C:\Users\max\OneDrive\Desktop\Code\C#\SaveAndLoad\STATS\stats.txt";
    Data data = new Data() { Name = name, Age = age, FavoriteColor = color, FavoriteNumber = number };
    using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.OpenOrCreate))
    {
        System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(data.GetType());
        xml.Serialize(fs, data);
    }

    // read from stats.txt into a Data object
    Data data2;
    using (System.IO.FileStream fs = new System.IO.FileStream(path, System.IO.FileMode.Open))
    {
        System.Xml.Serialization.XmlSerializer xml = new System.Xml.Serialization.XmlSerializer(typeof(Data));
        data2 = xml.Deserialize(fs) as Data;
    }
    // do something with "data2":
    Console.WriteLine("Name: " + data2.Name);
    Console.WriteLine("Age: " + data2.Age);
    Console.WriteLine("Color: " + data2.FavoriteColor);
    Console.WriteLine("Number: " + data2.FavoriteNumber);

    Console.Write("Press Enter to Quit");
    Console.ReadLine();
}
生成的XML文件:

<?xml version="1.0"?>
<Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Name>Mike</Name>
  <Age>47</Age>
  <FavoriteColor>Blue</FavoriteColor>
  <FavoriteNumber>42</FavoriteNumber>
</Data>

迈克
47
蓝色
42

如果您创建了另一个包含
List
的类,则可以使用非常相似的代码以相同的方式序列化该类。

有许多不同的解决方案

正如我在您的示例中所看到的,它不一定是一个列表,您的目标只是保存和读取文件中的信息

我将演示一个使用类和JSON的解决方案

首先为对象创建一个类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string FavoriteColor { get; set; }
    public int FavoriteNumber { get; set; }
}
写:

// Create an instance of `Person`
var person = new Person
{
   Name = name,
   Age = age,
   FavoriteColor = favoriteColor,
   FavoriteNumber = favoriteNumber
};

// Serialize this object as a JSON
var serializedPerson = JsonConvert.SerializeObject(person);

// Write in the file
File.WriteAllText(path, serializedPerson);
全文如下:

// Reads the file
var serializedPerson = File.ReadAllText(path);

// Deserialize the object 
var person = JsonConvert.DeserializeObject<Person>();
//读取文件
var serializedPerson=File.ReadAllText(路径);
//反序列化对象
var person=JsonConvert.DeserializeObject();

有很多不同的解决方案可以做到这一点

正如我在您的示例中所看到的,它不一定是一个列表,您的目标只是保存和读取文件中的信息

我将演示一个使用类和JSON的解决方案

首先为对象创建一个类:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string FavoriteColor { get; set; }
    public int FavoriteNumber { get; set; }
}
写:

// Create an instance of `Person`
var person = new Person
{
   Name = name,
   Age = age,
   FavoriteColor = favoriteColor,
   FavoriteNumber = favoriteNumber
};

// Serialize this object as a JSON
var serializedPerson = JsonConvert.SerializeObject(person);

// Write in the file
File.WriteAllText(path, serializedPerson);
全文如下:

// Reads the file
var serializedPerson = File.ReadAllText(path);

// Deserialize the object 
var person = JsonConvert.DeserializeObject<Person>();
//读取文件
var serializedPerson=File.ReadAllText(路径);
//反序列化对象
var person=JsonConvert.DeserializeObject();

最简单的方法是使用BinaryWriter或BinaryReader,但您也可以简单地写出每种类型的文本表示形式,并在读回时对其进行解析,就像您现在使用Convert.ToInt16所做的那样。您还可以使用序列化和反序列化。提示:
int
Int32
不是
Int16
。顺便说一句,您可以使用
int.Parse()
。这是否回答了您的问题?如果答案有用,您可以将其标记为已接受。最简单的方法是使用BinaryWriter或BinaryReader,但您也可以简单地写出每种类型的文本表示形式,并在读回时对其进行解析,就像您现在使用Convert.ToInt16所做的那样。您还可以使用序列化和反序列化。提示:
int
Int32
不是
Int16
。顺便说一句,您可以使用
int.Parse()
。这是否回答了您的问题?你可以将一些答案标记为已接受,以防有用。