0
votes

Comment puis-je faire une liste de différents types de données puis enregistrer dans un fichier c #

J'ai besoin d'obtenir une liste avec différents types de données et de les enregistrer dans un fichier texte. J'ai créé du code pour obtenir les variables et créer un fichier. Je ne sais pas comment créer la liste, puis la sauvegarder.

Voici mon code:

//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));


3 commentaires

Le moyen le plus simple est d'utiliser un BinaryWriter ou BinaryReader, mais vous pouvez également simplement écrire la représentation textuelle de chaque type et l'analyser lorsque vous la relisez, comme vous le faites déjà avec Convert.ToInt16. Vous pouvez également utiliser la sérialisation et la désérialisation.


Astuce: int est Int32 non Int16 . Btw, vous pouvez utiliser int.Parse() place.


Est-ce que cela répond à votre question? Comment enregistrer des variables dans un nouveau fichier texte afin que ces variables soient chargées lors de la prochaine exécution du programme?


3 Réponses :


1
votes

Si vous souhaitez l'enregistrer sous forme de texte, vous pouvez utiliser StreamWriter .

string[] lines = File.ReadAllLines(path);
Console.WriteLine(string.Join(Environment.NewLine, lines));
// you may load it to variables too
name = lines[0];
age = int.Parse(lines[1]);
color = lines[2];
number = int.Parse(lines[3]);

Il se comporte comme Console.WriteLine() .

Pour lire, faites la même chose que depuis la Console .

using (StreamReader sr = new StreamReader(path))
{
    name = sr.ReadLine();
    age = int.Parse(sr.ReadLine());
    color = sr.ReadLine();
    number = int.Parse(sr.ReadLine());
}

Ou une autre version (juste pour le plaisir) pour afficher le contenu du fichier.

using (StreamWriter sw = new StreamWriter(path))
{
    sw.WriteLine(name);
    sw.WriteLine(age);
    sw.WriteLine(color);
    sw.WriteLine(number);
}


0 commentaires

0
votes

Vous pouvez utiliser la sérialisation XML .

Tout d'abord, créez une classe pour encapsuler vos données:

<?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>

Ensuite, un exemple d'écriture et de lecture du fichier:

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();
}

Fichier XML généré:

public class Data
{
    public string Name;
    public int Age;
    public string FavoriteColor;
    public int FavoriteNumber;
}

Si vous créez une autre classe qui contient List<Data> , vous pouvez utiliser un code très similaire pour sérialiser cette classe de la même manière.


0 commentaires

0
votes

Il existe de nombreuses solutions différentes pour y parvenir.

Comme je peux le voir dans votre exemple, ce n'est pas nécessairement une liste, votre objectif est simplement de sauvegarder et de lire des informations à partir d'un fichier.

Je vais illustrer une solution en utilisant une classe et JSON.

Créez d'abord une classe pour votre objet:

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

// Deserialize the object 
var person = JsonConvert.DeserializeObject<Person>();

Pour écrire:

// 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);

Lire:

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


0 commentaires