2016-11-04 1 views
-2

J'ai ce code quand les gens ferment le jeu pour sauver tous leurs animaux de compagnie actuellement sélectionnés (c'est pour l'école ne vous inquiétez pas comment je l'ai appelé "Squirtle", pas de problèmes de copyright ici) . Le code en question est:StreamWriter ne pas écrire tous les caractères

using (StreamWriter sw = File.CreateText(@"..\..\pets.txt")) 
{ 
    sw.AutoFlush = true; 
    foreach (Pet p in petList) 
    { 
     sw.Write(p.PetID + ' '); 
     sw.Write(p.Name + ' '); 
     sw.Write(p.HP + ' '); 
     sw.Write(p.Type + ' '); 
     sw.Write(p.Level + ' ' ); 
     sw.Write(p.Rarity + ' '); 
     sw.WriteLine(p.Speed);        
    } 
} 

les virgules étaient des espaces et je viens ajouté le autoflush pour essayer de résoudre le problème, mais au fond, peu importe combien de fois je l'exécuter, les deux premiers, deux suivants, et dernier 3 morceaux de données n'ont pas d'espaces entre eux, par exemple: 32SQUIRTLE 77AQUATIC 41930. cela se produit chaque fois que je l'exécute et je me demande si quelqu'un sait pourquoi il fait cela? Je peux utiliser n'importe quel délimiteur aussi si l'espace et la virgule sont connus avec StreamWriter ou quelque chose.

+4

si vous remplacez ' ''' avec '" "' résout-il votre problème? –

+0

Je regarde juste après que l'écrivain de flux s'exécute et il ressemble à ça, je vais essayer des guillemets et voir si elle le corrige –

Répondre

8

Vous faites Int + Char, la surcharge pour cette opération entraîne Int + (int) Char qui relativisent l'espace dans son point de code Unicode et faire opération arithmétique

Qu'est-ce que vous voulez faire est p.PetID.ToString() + " "

+0

C'est ce que je pensais aussi, mais n'était pas confiant dans la réponse assez pour poster . –

+0

@ScottChamberlain J'ai effectivement débogué un problème comme celui-ci avant si im 100% sûr que c'est le cas: D – Steve

+1

merci l'homme je vais lui donner une bonne réponse dans comme 10 minutes quand il me permet –