Ma condition initiale est de permettre à l'utilisateur de télécharger un fichier à partir de la liste d'objets pour cela j'ai trouvé cette solution https://stackoverflow.com / a / 49207997/11178128 ,
Mais le problème est que quand il s'agit de cette ligne
List<Device> devices; using (StreamReader r = new StreamReader(String.Format(@"{0}\deviceList.json", savefilePath))) { string json = r.ReadToEnd(); devices = JsonConvert.DeserializeObject<List<Device>>(json); } byte[] bin; //String.Format(@"{0}\devices.csv", savefilePath) using (MemoryStream stream = new MemoryStream()) using (TextWriter textWriter = new StreamWriter(stream)) using (CsvWriter csv = new CsvWriter(textWriter)) { csv.Configuration.ShouldQuote = (field, context) => false; csv.WriteRecords(devices); bin = stream.ToArray(); }
il n'y a pas de flux écrits dessus. Ainsi, le bac est un tableau vide. Quel pourrait être le problème?
De plus, je mets mon API Web à disposition via un service Windows. Et pour une raison quelconque, System.Web.HttpContext.Current.Response
me donne null. une idée pourquoi cela peut être?
Merci d'avance.
Voici le code que j'ai jusqu'à présent
bin = stream.ToArray();
3 Réponses :
Hey merci pour la réponse et désolé pour la réponse retardée. Je vois en enveloppant le textWriter dans le second en utilisant le bloc qu'il vide automatiquement le streamWriter? c'est super. de toute façon, j'ai publié ce que j'utilise maintenant car ma solution pense que c'est un bon moyen de le résoudre.
En fait, après un peu de difficulté, j'ai trouvé que cette ligne me manquait.
byte[] data; using (MemoryStream stream = new MemoryStream()) using (TextWriter textWriter = new StreamWriter(stream)) using (CsvWriter csv = new CsvWriter(textWriter)) { csv.Configuration.RegisterClassMap<DeviceMap>(); csv.Configuration.ShouldQuote = (field, context) => false; csv.WriteRecords(values); textWriter.Flush(); data = stream.ToArray(); } return data;
Comme mentionné dans la réponse ci-dessous, j'ai dû vider l'objet textWriter afin d'écrire dans le fichier . Voici le code de travail.
textWriter.Flush();
using (var ms = new MemoryStream()) { using (var writer = new StreamWriter(ms)) using (var csv = new CsvWriter(writer)) { csv.WriteRecords(dbresponse); } // the closing tag here is important!!It flush the streamwriter ms.ToArray(); // or ms.GetBuffer() } Now the ms.ToArray() will contain the data from csvHelper
Bonjour, étant donné que la méthode
.ToArray
fonctionne probablement correctement, le problème est susceptible de se trouver dans le reste de votre code. Veuillez modifier votre question et nous fournir plus de détails sur le code :-)@Stefan Hey merci pour la réponse rapide. ouais j'ai mis à jour mon code ici.
Hmm ... il me manque quelque chose; autant que je peux voir cela devrait fonctionner.
@Stefan ouais a trouvé la solution. J'ai dû vider le StreamWriter. Posté la réponse ci-dessous. Merci pour la réponse.