web-dev-qa-db-fra.com

Meilleure façon de lire et d'écrire dans des fichiers

Il y a beaucoup de façons différentes de lire et d'écrire des fichiers ( fichiers texte , pas binaires) en C #. 

J'ai juste besoin de quelque chose de facile et qui utilise le moins de code possible, car je vais beaucoup travailler avec des fichiers dans mon projet. J'ai seulement besoin de quelque chose pour string puisque tout ce dont j'ai besoin est de lire et d'écrire strings.

270
ApprenticeHacker

Utilisez File.ReadAllText et File.WriteAllText .

Cela ne pourrait pas être plus simple ...

Exemples MSDN:

// Create a file to write to.
string createText = "Hello and Welcome" + Environment.NewLine;
File.WriteAllText(path, createText);

// Open the file to read from.
string readText = File.ReadAllText(path);
438
vc 74

En plus de File.ReadAllText, File.ReadAllLines et File.WriteAllText (et des aides similaires de la classe File) indiqués dans une autre réponse vous pouvez utiliser StreamWriter / StreamReader classes.

Écrire un fichier texte:

using(StreamWriter writetext = new StreamWriter("write.txt"))
{
    writetext.WriteLine("writing in text file");
}

Lire un fichier texte:

using(StreamReader readtext = new StreamReader("readme.txt"))
{
   string readMeText = readtext.ReadLine();
}

Remarques:

  • Vous pouvez utiliser readtext.Close() au lieu de using , mais le fichier/lecteur/enregistreur ne sera pas fermé en cas d'exception.
  • Sachez que le chemin relatif est relatif au répertoire de travail actuel. Vous voudrez peut-être utiliser/construire un chemin absolu.
  • using/Close manquant est une raison très courante de "pourquoi les données ne sont pas écrites dans un fichier".
137
Bali C
FileStream fs = new FileStream(txtSourcePath.Text,FileMode.Open, FileAccess.Read);
using(StreamReader sr = new StreamReader(fs))
{
   using (StreamWriter sw = new StreamWriter(Destination))
   {
            sw.writeline("Your text");
    }
}
14
Swapnil
using (var file = File.Create("pricequote.txt"))
{
    ...........                        
}

using (var file = File.OpenRead("pricequote.txt"))
{
    ..........
}

Simple, facile et supprime/nettoie également l'objet une fois que vous avez terminé.

10
Ankit Dass

Le moyen le plus simple de lire à partir d'un fichier et d'écrire dans un fichier:

//Read from a file
string something = File.ReadAllText("C:\\Rfile.txt");

//Write to a file
using (StreamWriter writer = new StreamWriter("Wfile.txt"))
{
    writer.WriteLine(something);
}
9
yazarloo

@AlexeiLevenkov m'a indiqué un autre "moyen le plus simple", à savoir la méthode extension . Il faut juste un peu de codage, puis le moyen le plus simple et le plus facile de lire/écrire, et la possibilité de créer des variations en fonction de vos besoins personnels. Voici un exemple complet:

Ceci définit la méthode d'extension sur le type string. Notez que la seule chose qui compte vraiment est l'argument de la fonction avec le mot clé supplémentaire this, qui le fait se référer à l'objet auquel la méthode est attachée. Les déclarations d'espace de nom et de classe sont facultatives.

using System.IO;//File, Directory, Path

namespace Lib
{
    /// <summary>
    /// Handy string methods
    /// </summary>
    public static class Strings
    {
        /// <summary>
        /// Extension method to write the string Str to a file
        /// </summary>
        /// <param name="Str"></param>
        /// <param name="Filename"></param>
        public static void WriteToFile(this string Str, string Filename)
        {
            File.WriteAllText(Filename, Str);
            return;
        }

        // of course you could add other useful string methods...
    }//end class
}//end ns

Voici comment utiliser le string extension method, notez qu'il se réfère automatiquement au class Strings:

using Lib;//(extension) method(s) for string
namespace ConsoleApp_Sandbox
{
    class Program
    {
        static void Main(string[] args)
        {
            "Hello World!".WriteToFile(@"c:\temp\helloworld.txt");
            return;
        }

    }//end class
}//end ns

Je n'aurais jamais trouvé cela moi-même, mais cela fonctionne très bien, alors je voulais partager cela. S'amuser!

8
Roland

Ou, si vous êtes vraiment sur les lignes:

System.IO.File contient également une méthode statique WriteAllLines , afin que vous puissiez faire:

IList<string> myLines = new List<string>()
{
    "line1",
    "line2",
    "line3",
};

File.WriteAllLines("./foo", myLines);
4
anhoppe

Il est bon, lors de la lecture, d'utiliser le contrôle OpenFileDialog pour rechercher un fichier à lire. Trouvez le code ci-dessous:

N'oubliez pas d'ajouter l'instruction using suivante pour lire les fichiers: using System.IO;

private void button1_Click(object sender, EventArgs e)
{
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
         textBox1.Text = File.ReadAllText(openFileDialog1.FileName);  
    }
}

Pour écrire des fichiers, vous pouvez utiliser la méthode File.WriteAllText.

3
SamekaTV

Voici les méthodes les plus courantes et les plus couramment utilisées pour écrire et lire des fichiers:

using System.IO;

File.AppendAllText(sFilePathAndName, sTextToWrite);//add text to existing file
File.WriteAllText(sFilePathAndName, sTextToWrite);//will overwrite the text in the existing file. If the file doesn't exist, it will create it. 
File.ReadAllText(sFilePathAndName);

Auparavant, au collège, on m'avait appris à utiliser un lecteur/un rédacteur de flux, mais les méthodes Fichier E/S sont moins complexes et nécessitent moins de lignes de code. Vous pouvez taper dans "Fichier". dans votre IDE (assurez-vous d'inclure l'instruction d'importation System.IO) et consultez toutes les méthodes disponibles. Vous trouverez ci-dessous des exemples de méthodes pour lire/écrire des chaînes dans/à partir de fichiers texte (.txt.) À l'aide d'une application Windows Forms.

Ajouter du texte à un fichier existant:

private void AppendTextToExistingFile_Click(object sender, EventArgs e)
{
    string sTextToAppend = txtMainUserInput.Text;
    //first, check to make sure that the user entered something in the text box.
    if (sTextToAppend == "" || sTextToAppend == null)
    {MessageBox.Show("You did not enter any text. Please try again");}
    else
    {
        string sFilePathAndName = getFileNameFromUser();// opens the file dailog; user selects a file (.txt filter) and the method returns a path\filename.txt as string.
        if (sFilePathAndName == "" || sFilePathAndName == null)
        {
            //MessageBox.Show("You cancalled"); //DO NOTHING
        }
        else 
        {
            sTextToAppend = ("\r\n" + sTextToAppend);//create a new line for the new text
            File.AppendAllText(sFilePathAndName, sTextToAppend);
            string sFileNameOnly = sFilePathAndName.Substring(sFilePathAndName.LastIndexOf('\\') + 1);
            MessageBox.Show("Your new text has been appended to " + sFileNameOnly);
        }//end nested if/else
    }//end if/else

}//end method AppendTextToExistingFile_Click

Obtenez le nom de fichier de l'utilisateur via l'explorateur de fichiers/la boîte de dialogue d'ouverture de fichier (vous en aurez besoin pour sélectionner les fichiers existants).

private string getFileNameFromUser()//returns file path\name
{
    string sFileNameAndPath = "";
    OpenFileDialog fd = new OpenFileDialog();
    fd.Title = "Select file";
    fd.Filter = "TXT files|*.txt";
    fd.InitialDirectory = Environment.CurrentDirectory;
    if (fd.ShowDialog() == DialogResult.OK)
    {
        sFileNameAndPath = (fd.FileName.ToString());
    }
    return sFileNameAndPath;
}//end method getFileNameFromUser

Obtenir le texte d'un fichier existant:

private void btnGetTextFromExistingFile_Click(object sender, EventArgs e)
{
    string sFileNameAndPath = getFileNameFromUser();
    txtMainUserInput.Text = File.ReadAllText(sFileNameAndPath); //display the text
}
2
technoman23

Vous recherchez les classes File, StreamWriter et StreamReader.

0
SLaks
     class Program
    { 
         public static void Main()
        { 
            //To write in a txt file
             File.WriteAllText("C:\\Users\\HP\\Desktop\\c#file.txt", "Hello and Welcome");

           //To Read from a txt file & print on console
             string  copyTxt = File.ReadAllText("C:\\Users\\HP\\Desktop\\c#file.txt");
             Console.Out.WriteLine("{0}",copyTxt);
        }      
    }
0
RAKIBUZ SULTAN PRANTO