サーチ…


前書き

ファイルを管理します。

構文

  • new System.IO.StreamWriter(string path)
  • new System.IO.StreamWriter(string path, bool append)
  • System.IO.StreamWriter.WriteLine(string text)
  • System.IO.StreamWriter.WriteAsync(string text)
  • System.IO.Stream.Close()
  • System.IO.File.ReadAllText(string path)
  • System.IO.File.ReadAllLines(string path)
  • System.IO.File.ReadLines(string path)
  • System.IO.File.WriteAllText(string path, string text)
  • System.IO.File.WriteAllLines(string path, IEnumerable<string> contents)
  • System.IO.File.Copy(string source, string dest)
  • System.IO.File.Create(string path)
  • System.IO.File.Delete(string path)
  • System.IO.File.Move(string source, string dest)
  • System.IO.Directory.GetFiles(string path)

パラメーター

パラメータ詳細
パスファイルの場所。
追加するファイルが存在する場合、trueはファイルの末尾にデータを追加し(追加)、falseはファイルを上書きします。
テキスト書き込まれるか格納されるテキスト。
内容書き込まれる文字列のコレクション。
ソース使用するファイルの場所。
dest ファイルを移動する場所。

備考

  • 常にStreamオブジェクトを閉じてください。上記のようにusingブロックをusingか、 myStream.Close()手動で呼び出してこれを行うことができます。
  • 現在のユーザーに、ファイルを作成しようとしているパスに必要な権限があることを確認します。
  • @"C:\MyFolder\MyFile.txt"ようにバックスラッシュを含むパス文字列を宣言するときは、 逐語文字列を使用する必要があります@"C:\MyFolder\MyFile.txt"

System.IO.Fileクラスを使用したファイルからの読み取り

System.IO.File.ReadAllText関数を使用すると、ファイルの内容全体を文字列に読み取ることができます。

string text = System.IO.File.ReadAllText(@"C:\MyFolder\MyTextFile.txt");

System.IO.File.ReadAllLines関数を使用して、ファイルを行の配列として読み取ることもできます。

string[] lines = System.IO.File.ReadAllLines(@"C:\MyFolder\MyTextFile.txt");

System.IO.StreamWriterクラスを使用してファイルに行を書き込む

System.IO.StreamWriterクラス:

特定のエンコーディングのストリームに文字を書き込むためのTextWriterを実装します。

WriteLineメソッドを使用すると、コンテンツをファイルに1行WriteLine書き込むことができます。

StreamWriterオブジェクトがスコープから外れてファイルが閉じられるとすぐに破棄されるようにするusingキーワードの使用に注目してください。

string[] lines = { "My first string", "My second string", "and even a third string" };
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt"))
{
    foreach (string line in lines)
    {
        sw.WriteLine(line);
    }
}

StreamWriterは、そのコンストラクタ内に2番目のboolパラメータを受け取ることができ、ファイルを上書きするのではなくファイルにAppendすることができます。

bool appendExistingFile = true;
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\MyFolder\OutputText.txt", appendExistingFile ))
{
    sw.WriteLine("This line will be appended to the existing file");
}

System.IO.Fileクラスを使用してファイルに書き込む

System.IO.File.WriteAllText関数を使用して、文字列をファイルに書き込むことができます。

string text = "String that will be stored in the file";
System.IO.File.WriteAllText(@"C:\MyFolder\OutputFile.txt", text);

System.IO.File.WriteAllLines関数を使用して、 IEnumerable<String>を2番目のパラメータとして受け取ることもできます(前の例では単一の文字列ではありません)。これにより、一連の行から内容を書き込むことができます。

string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);

IEnumerableを使用してファイルを1行ずつ遅延読み込みする

大きなファイルを操作する場合は、 System.IO.File.ReadLinesメソッドを使用して、ファイルのすべての行をIEnumerable<string>に読み込むことができます。これはSystem.IO.File.ReadAllLinesと似ていますが、ファイル全体を一度にメモリにロードするのではなく、大容量ファイルを扱うときに効率的になります。

IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);

File.ReadLinesの2番目のパラメータはオプションです。エンコーディングを指定する必要がある場合に使用できます。

ToArrayToListなどの関数を呼び出すと、すべての行が強制的に読み込まれるため、 ReadLinesを使用する利点は無効になります。このメソッドを使用する場合は、 foreachループまたはLINQを使用してIEnumerableを列挙することをおforeachます。

ファイルの作成

ファイル静的クラス

File静的クラスのCreateメソッドを使用することにより、 FileCreateすることができます。メソッドは、指定されたパスにファイルを作成し、同時にファイルを開き、ファイルのFileStreamます。あなたがそれを完了した後、ファイルを閉じることを確認してください。

ex1:

var fileStream1 = File.Create("samplePath");
/// you can write to the fileStream1
fileStream1.Close();

ex2:

using(var fileStream1 = File.Create("samplePath"))
{
    /// you can write to the fileStream1
}

ex3:

File.Create("samplePath").Close();

FileStreamクラス

このクラスのコンストラクタには多くのオーバーロードがありますが、実際にはここで詳しく説明しています 。下の例は、このクラスのもっとも使用されている機能をカバーする例です。

var fileStream2 = new FileStream("samplePath", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.None);

これらのリンクから、 FileModeFileAccess 、およびFileShareの列挙をチェックすることができます。基本的には次のような意味です:

FileMode: Answers "ファイルを作成する必要がありますか?オープンしていない場合は作成してからオープンしますか?"ちょっとした質問。

FileAccess: Answers "ファイルを読み込み、ファイルに書き込むか、その両方に書き込むことができますか?"ちょっとした質問。

FileShare: Answers「同時に使用している間に他のユーザーがファイルを読み書きできるか」ちょっとした質問。

ファイルをコピーする

ファイル静的クラス

File静的クラスは、この目的のために簡単に使用できます。

File.Copy(@"sourcePath\abc.txt", @"destinationPath\abc.txt");
File.Copy(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");

備考:この方法では、ファイルがコピーされます。つまり、ソースから読み取られ、宛先パスに書き込まれます。これはリソースを消費するプロセスで、ファイルサイズに相対的な時間がかかり、スレッドを使用しないとプログラムがフリーズする可能性があります。

ファイルを移動する

ファイル静的クラス

ファイル静的クラスは、この目的のために簡単に使用できます。

File.Move(@"sourcePath\abc.txt", @"destinationPath\xyz.txt");

Remark1:ファイルのインデックスのみを変更します(ファイルが同じボリュームで移動されている場合)。この操作では、ファイルサイズの相対的な時間はかかりません。

Remark2:宛先パス上の既存のファイルを上書きすることはできません。

ファイルを削除する

string path = @"c:\path\to\file.txt";
File.Delete(path);

ファイルが存在しない場合、 Deleteは例外をスローしませんが、指定されたパスが無効であるか、呼び出し元に必要なアクセス権がないなど、例外がスローされます。 try-catchブロック内のDeleteへの呼び出しを常にラップし、予想されるすべての例外を処理する必要があります。競合状態が発生する可能性がある場合は、 ロックステートメント内のロジックをラップします。

ファイルとディレクトリ

ディレクトリ内のすべてのファイルを取得する

 var FileSearchRes = Directory.GetFiles(@Path, "*.*", SearchOption.AllDirectories);

指定されたディレクトリ内のすべてのファイルを表すFileInfoの配列を返します。

特定の拡張子を持つファイルを取得する

 var FileSearchRes = Directory.GetFiles(@Path, "*.pdf", SearchOption.AllDirectories);

指定された拡張子を持つ指定されたディレクトリ内のすべてのファイルを表すFileInfoの配列を返します。

非同期でStreamWriterを使用してファイルにテキストを書き込む

// filename is a string with the full path
// true is to append        
using (System.IO.StreamWriter file = new System.IO.StreamWriter(filename, true))
{
   // Can write either a string or char array
   await file.WriteAsync(text);
}


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow