ファイルを読み書きする最も簡単な方法


341

C#でファイル(バイナリではなくテキストファイル)を読み書きするには、さまざまな方法があります。

私はプロジェクトで多くのファイルを扱うので、簡単でコードの使用量が最も少ないものが必要です。必要なのはstringstringsの読み取りと書き込みだけなので、何かが必要です。

回答:


544

File.ReadAllTextおよびFile.WriteAllTextを使用します

それはもっと簡単なことではありません...

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);

2
確かに非常にシンプルですが、なぜ質問を投稿する必要があったのでしょうか。OPは、おそらく私と17人の賛成者と同様に、の線に沿って「間違った」方向を見ていましたstring.Write(filename)。マイクロソフトのソリューションが私のソリューションよりもシンプル/優れているのはなぜですか?
Roland

7
@ Roland、.netでは、ファイル処理は言語ではなくフレームワークによって提供されます(たとえば、ファイルを宣言して操作するためのC#キーワードはありません)。文字列はより一般的な概念であるため、C#の一部となっています。したがって、ファイルが文字列については知っているが、その反対は知らないのは自然なことです。
vc 74

XmlはC#のデータ型の一般的な概念でもあり、XmlDocument.Save(filename)などがあります。しかしもちろん、通常は1つのXmlオブジェクトが1つのファイルに対応し、複数の文字列が1つのファイルを形成するという違いがあります。
Roland

7
@Rolandをサポートしたい場合"foo".Write(fileName)は、拡張を簡単に作成public static Write(this string value, string fileName) { File.WriteAllText(fileName, value);}してプロジェクトで使用できます。
Alexei Levenkov、2015

1
File.WriteAllLines(filename、string [])もあります
ミッチウィート

162

別の回答に示されている、、および(およびクラスの類似のヘルパー)に加えてFile.ReadAllText、/ クラスを使用できます。File.ReadAllLinesFile.WriteAllTextFileStreamWriterStreamReader

テキストファイルの書き込み:

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

テキストファイルの読み取り:

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

ノート:

  • readtext.Dispose()代わりに使用できますがusing、例外が発生した場合、ファイル/リーダー/ライターは閉じません。
  • 相対パスは現在の作業ディレクトリに対する相対パスであることに注意してください。絶対パスを使用/構築することができます。
  • 行方不明using/ Close「なぜデータがファイルに書き込まれていない」のは非常に一般的な理由です。

3
確認してくださいusing-他の回答のように、あなたのストリームstackoverflow.com/a/7571213/477420
アレクセイLevenkovを

5
StreamWriterStreamReaderusing System.IO;を使用する必要があります。
2015

1
また、ファイルが存在しない場合、StreamWriterはWriteLineを試行したときにファイルを作成します。この場合、WriteLineが呼び出されたときに存在しない場合、write.txtが作成されます。
TheMiddleMan

3
また、注目に値するのは、ファイルにテキストを追加するオーバーロードがあることです。new StreamWriter("write.txt", true)ファイルが存在しない場合はファイルが作成され、それ以外の場合は既存のファイルに追加されます。
ArieKanarie 2017年

また、ストリームリーダーとストリームライターをFileStreamと組み合わせて使用​​すると(ファイル名の代わりに渡す)、読み取り専用モードまたは共有モードでファイルを開くことができることにも注意してください。
Simon Zyx 2017

18
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");
    }
}

1
fs最後に解散してみませんか?
LuckyLikey、2015年

1
StreamReaderがそれを行うので、@ LuckyLikey。2番目の使用のネストは必要ありません
Novaterata

説明できる?StreamReaderがfsを破棄する必要があるのはなぜですか?それは私が見ることができる限りsrを処分することができるだけです。ここに3番目のusingステートメントが必要ですか?
Philm 2017

usingステートメントでオブジェクトをDisposeすることはありません。ステートメントが返されると、Disposeメソッドが自動的に呼び出され、ステートメントがネストされているかどうかは関係ありません。結局、すべてがコールスタックで順序付けられます。
Patrik Forsberg、2018

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

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

シンプルで簡単で、使い終わったらオブジェクトを破棄/クリーンアップします。


10

ファイルから読み取り、ファイルに書き込む最も簡単な方法:

//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);
}

5
なぜないFile.WriteAllText部分を書くため?
Peter Mortensen、

9

@AlexeiLevenkovは、私を別の「最も簡単な方法」、つまり拡張メソッドに向けました。それはほんの少しのコーディングを必要とし、それから読み書きするための絶対的に最も簡単な方法を提供し、それに加えて個人のニーズに応じてバリエーションを作成する柔軟性を提供します。以下は完全な例です。

これは、string型の拡張メソッドを定義します。本当に重要な唯一のことはthis、メソッドがアタッチされているオブジェクトを参照させる、追加のキーワードを含む関数の引数であることに注意してください。クラス名は関係ありません。クラスとメソッドを宣言する必要ありますstatic

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

これはの使用方法でありstring extension method、自動的にを参照することに注意してください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

自分でこれを見つけたことはなかったでしょうが、うまく機能しているので、共有したいと思いました。楽しんで!


7

これらは、ファイルへの読み書きに最もよく使用される方法です。

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);

私が大学で教えられた古い方法は、ストリームリーダー/ストリームライターを使用することでしたが、ファイル I / Oメソッドはそれほど扱いやすくなく、必要なコード行が少なくなっています。「ファイル」と入力できます。IDEで(System.IOインポートステートメントが含まれていることを確認してください)、使用可能なすべてのメソッドを確認します。以下は、Windowsフォームアプリを使用してテキストファイル(.txt。)に文字列を読み書きする方法の例です。

既存のファイルにテキストを追加します。

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

ファイルエクスプローラー/ファイルを開くダイアログを介してユーザーからファイル名を取得します(既存のファイルを選択するには、これが必要です)。

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

既存のファイルからテキストを取得します。

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

5

または、あなたが本当にラインについてなら:

System.IO.Fileには静的メソッドWriteAllLinesも含まれているので、次のことができます。

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

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

5

読み取り時には、OpenFileDialogコントロールを使用して、読み取りたいファイルを参照することをお勧めします。以下のコードを見つけてください:

usingファイルを読み取るために次のステートメントを追加することを忘れないでください:using System.IO;

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

ファイルを書き込むには、メソッドを使用できますFile.WriteAllText


2
     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);
        }      
    }

1

あなたは探しているFileStreamWriterStreamReaderクラス。


6
非常に役に立たない答え。つまり、OPは、答えを見つけることを期待して、これらの用語をグーグルで検索する必要があります。最良の答えは例です。
tno2007

0
private void Form1_Load(object sender, EventArgs e)
    {
        //Write a file
        string text = "The text inside the file.";
        System.IO.File.WriteAllText("file_name.txt", text);

        //Read a file
        string read = System.IO.File.ReadAllText("file_name.txt");
        MessageBox.Show(read); //Display text in the file
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.