Comment puis-je créer un fichier .csv implicitement/automatiquement en utilisant la bonne méthode, ajouter du texte à ce fichier existant en mémoire puis convertir en données en mémoire dans un tableau d'octets?
string path = @"C:\test.txt";
File.WriteAllLines(path, GetLines());
byte[] bytes = System.IO.File.ReadAllBytes(path);
Avec cette approche, je crée toujours un fichier (bon), y écris (bon) puis le ferme (mauvais) puis rouvre le fichier à partir d'un chemin et le lis sur le disque dur (mauvais)
Comment puis-je améliorer cela?
MISE À JOUR
Une approche presque bonne serait:
using (var fs = new FileStream(@"C:\test.csv", FileMode.Create, FileAccess.ReadWrite))
{
using (var memoryStream = new MemoryStream())
{
fs.CopyTo(memoryStream );
return memoryStream .ToArray();
}
}
mais je ne suis pas en mesure d'écrire du texte dans ce flux de fichiers ... juste des octets ...
MISE À JOUR 2
using (var fs = File.Create(@"C:\temp\test.csv"))
{
using (var sw = new StreamWriter(fs, Encoding.Default))
{
using (var ms = new MemoryStream())
{
String message = "Message is the correct ääüö Pi(\u03a0), and Sigma (\u03a3).";
sw.Write(message);
sw.Flush();
fs.CopyTo(ms);
return ms.ToArray();
}
}
}
Le message de chaîne n'est pas conservé dans le fichier test.csv. Quelqu'un sait pourquoi?
Écrivez du texte dans Memory Stream.
byte[] bytes = null;
using (var ms = new MemoryStream())
{
TextWriter tw = new StreamWriter(ms);
tw.Write("blabla");
tw.Flush();
ms.Position = 0;
bytes = ms.ToArray();
//or save to disk using FileStream (fs)
ms.WriteTo(fs);
}
MISE À JOUR
Utiliser directement le flux de fichiers
using (var fs = new FileStream(@"C:\sh\test.csv", FileMode.Create, FileAccess.ReadWrite))
{
TextWriter tw = new StreamWriter(fs);
tw.Write("blabla");
tw.Flush();
}
Vous pouvez obtenir un tableau d'octets à partir d'une chaîne en utilisant l'encodage:
Encoding.ASCII.GetBytes(aString);
Ou
Encoding.UTF8.GetBytes(aString);
Mais je ne sais pas pourquoi vous voudriez un csv comme octets. Vous pouvez charger le fichier entier dans une chaîne, y ajouter puis l'enregistrer:
string content;
using (var reader = new StreamReader(filename))
{
content = reader.ReadToEnd();
}
content += "x,y,z";
using (var writer = new StreamWriter(filename))
{
writer.Write(content);
}
Mise à jour: créez un csv en mémoire et renvoyez-le en octets:
var stringBuilder = new StringBuilder();
foreach(var line in GetLines())
{
stringBuilder.AppendLine(log);
}
return Encoding.ASCII.GetBytes(stringBuilder.ToString());