2017-10-20 14 views
1

J'ai essayé depuis des heures de comprendre pourquoi mon projet (application de bureau complet) ne me permet pas d'utiliser StreamWriter ou StreamReader correctement. Le problème est que si je tente de donner soit le StreamWriter ou StreamReader un filePath (juste une simple chaîne), comme illustré ci-dessous ...StreamWriter et StreamReader ne fonctionnent pas correctement

private readonly string _filePath = @"...Text.txt"; 

public string TestMethod(string text) 
{  
     // Does not accept a string as an argument, which it should based on the documentation 
     StreamReader reader = new StreamReader(); 
     text = reader.ReadToEnd(); 
     reader.Close(); 

     return text; 
} 

Edit: Exécution du code ci-dessus en essayant de faire toutes les lignes rouges disparaissent va traiter l'erreur postée plus bas dans ce post.

Ci-dessous est ce qu'il ressemble actuellement (mal)

Wrong

Correct

ci-dessus est ce qu'il devrait ressembler (correct - avec un chemin paramter)

Documentation: https://msdn.microsoft.com/en-us/library/f2ke0fzy(v=vs.110).aspx

... Je reçois des erreurs partout et si je essayer de le faire d'une autre manière en lui donnant d'autres arguments que je reçois une erreur disant:

System.IO.FileNotFoundException: 'Could not load file or assembly 'System.Console, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.' 

J'ai essayé de créer une toute nouvelle solution, qui se compose de 2 bibliothèques de classes (donc 2 projets pour 1 solution, je pense que serait correct de dire?) et ça marche plutôt bien. Je l'ai fait parce que mon autre solution consiste en 3 bibliothèques de classes, donc j'ai pensé que ce serait une bonne idée d'être cohérent dans la reproduction du problème, si je le pouvais. Donc, j'ai créé un simple fichier texte, l'ai peuplé avec du texte, et l'ai obtenu en sortie sur l'écran dans un TextBox de la nouvelle solution. Cela m'a fondamentalement laissé avec aucune idée de ce qu'il faut faire maintenant.

Est-ce que quelqu'un sait ce qui pourrait causer ce problème?

+1

De quel type de projet s'agit-il, s'agit-il d'une application de bureau complète ou s'agit-il d'une application de magasin d'applications ou d'une application téléphonique? –

+0

S'il vous plaît poster votre code et messages d'erreur au format texte, pas comme des captures d'écran. Cela dit, vous mentionnez "un chemin de fichier (juste une simple chaîne)" - pouvez-vous donner des exemples du type de complexité dans la chaîne que vous craignez pourrait contribuer à des problèmes avec StreamReader? –

+1

Quel framework .net votre projet cible-t-il? Regardez les propriétés du projet. – Igor

Répondre

2

Tout simplement, la classe StreamReader dans la version de .Net que vous ciblez (.Net Standard 1.4) ne prend pas en charge un constructeur qui prend un chemin de fichier.

Vous devez utiliser la classe FileStream pour ouvrir le fichier, puis utiliser le StreamReader pour lire le fichier.

est Ci-dessous un exemple copié à partir de la documentation:

https://docs.microsoft.com/en-us/dotnet/api/system.io.streamreader.-ctor?view=netstandard-1.4

using System; 
using System.IO; 

class Test 
{ 

    public static void Main() 
    { 
     string path = @"c:\temp\MyTest.txt"; 

     try 
     { 
      if (File.Exists(path)) 
      { 
       File.Delete(path); 
      } 

      using (StreamWriter sw = new StreamWriter(path)) 
      { 
       sw.WriteLine("This"); 
       sw.WriteLine("is some text"); 
       sw.WriteLine("to test"); 
       sw.WriteLine("Reading"); 
      } 

      using (FileStream fs = new FileStream(path, FileMode.Open)) 
      { 
       using (StreamReader sr = new StreamReader(fs)) 
       { 

        while (sr.Peek() >= 0) 
        { 
         Console.WriteLine(sr.ReadLine()); 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine("The process failed: {0}", e.ToString()); 
     } 
    } 
} 
0

Sur la base des commentaires, le StreamReader dans votre .NET actuelle n'a pas la surcharge appropriée qui peut prendre le chemin du fichier. Vous pouvez utiliser d'autres approches alternatives. Vous pouvez utiliser FileStream pour ouvrir le fichier que vous voulez et ensuite utiliser StreamReader pour la lecture.