web-dev-qa-db-ja.com

.txtファイルが存在しない場合、およびそれが新しい行を追加する場合は作成します。

.txtファイルを作成してそれに書き込みたいのですが、そのファイルがすでに存在する場合は、さらにいくつかの行を追加します。

string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
    File.Create(path);
    TextWriter tw = new StreamWriter(path);
    tw.WriteLine("The very first line!");
    tw.Close();
}
else if (File.Exists(path))
{
    TextWriter tw = new StreamWriter(path);
    tw.WriteLine("The next line!");
    tw.Close(); 
}

しかし、最初の行は常に上書きされるようです…どうして同じ行に書くのを避けることができますか(私はこれをループの中で使っています)?

私はそれがとても簡単なことであることを知っています、しかし私は以前にWriteLineメソッドを使いませんでした。私はC#が全く初めてです。

142
Berker Yüceer

正しいコンストラクタ を使用してください。

else if (File.Exists(path))
{
    using(var tw = new StreamWriter(path, true))
    {
        tw.WriteLine("The next line!");
    }
}
149
Daniel Hilgarth
string path = @"E:\AppServ\Example.txt";
File.AppendAllLines(path, new [] { "The very first line!" });

File.AppendAllText()もご覧ください。 AppendAllLinesは各行に改行を追加します。追加する必要はありません。

どちらの方法でもファイルが存在しない場合は作成されるため、作成する必要はありません。

54
drch
string path=@"E:\AppServ\Example.txt";

if(!File.Exists(path))
{
   File.Create(path).Dispose();

   using( TextWriter tw = new StreamWriter(path))
   {
      tw.WriteLine("The very first line!");
   }

}    
else if (File.Exists(path))
{
   using(TextWriter tw = new StreamWriter(path))
   {
      tw.WriteLine("The next line!");
   }
}
34
Aek

ファイルが存在するかどうかを実際に確認する必要はありません。StreamWriterが自動的にそれを行います。追加モードで開くと、ファイルが存在しない場合はファイルが作成され、その後は追加されて上書きされることはありません。だからあなたの最初のチェックは冗長です。

TextWriter tw = new StreamWriter(path, true);
tw.WriteLine("The next line!");
tw.Close(); 
16
John Boling

File.AppendAllTextはファイルに文字列を追加します。ファイルが存在しない場合もテキストファイルを作成します。あなたがコンテンツを読む必要がないなら、それは非常に効率的です。ユースケースはロギングです。

File.AppendAllText("C:\\log.txt", "hello world\n");
6
R.Cha

ファイルを「追加」モードで開きたいだけです。

http://msdn.Microsoft.com/ja-jp/library/3zc0w663.aspx

5
Ed Manet
 else if (File.Exists(path)) 
{ 
  using (StreamWriter w = File.AppendText(path))
        {
            w.WriteLine("The next line!"); 
            w.Close();
        }
 } 
4
Smack

StreamWriterを起動すると、以前のテキストが上書きされます。あなたはそのようにappendプロパティを使うことができます:

TextWriter t = new StreamWriter(path, true);
3
Matan Shahar

あなたはFileStreamを使用することができます。これですべての作業が完了します。

http://www.csharp-examples.net/filestream-open-file/

2
Tom Ceuppens
using(var tw = new StreamWriter(path, File.Exists(path)))
{
    tw.WriteLine(message);
}
1
Andreas Gusakov

これを試して。

string path = @"E:\AppServ\Example.txt";
if (!File.Exists(path))
{
    using (var txtFile = File.AppendText(path))
    {
        txtFile.WriteLine("The very first line!");
    }
}
else if (File.Exists(path))
{     
    using (var txtFile = File.AppendText(path))
    {
        txtFile.WriteLine("The next line!");
    }
}
1
Asiri Jayaweera

Microsoftのドキュメントから、ファイルが存在しない場合は作成し、それを1回の呼び出しで追加することができます。File.AppendAllTextメソッド(String、String)

.NET Framework(現在のバージョン)その他のバージョン

ファイルを開き、指定された文字列をファイルに追加してからファイルを閉じます。ファイルが存在しない場合、このメソッドはファイルを作成し、指定された文字列をファイルに書き込んでからファイルを閉じます。名前空間:System.IOアセンブリ:mscorlib(mscorlib.dll内)

構文C#C++ F#VB public static void AppendAllText(文字列パス、文字列の内容)パラメータpath型:System.String指定した文字列を追加するファイル。 contents型:System.Stringファイルに追加する文字列。

AppendAllText

1
David Fawzy

File.AppendAllText()メソッドを使用するだけで問題を解決できます。このメソッドは、使用できない場合はファイルの作成を処理し、ファイルを開いたり閉じたりします。

var outputPath = @"E:\Example.txt";
var data = "Example Data";
File.AppendAllText(outputPath, data);
0
Vijay Shaaruck