C# Language
ファイルとストリームのI / O
サーチ…
前書き
ファイルを管理します。
構文
-
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クラスを使用してファイルに行を書き込む
特定のエンコーディングのストリームに文字を書き込むための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番目のパラメータはオプションです。エンコーディングを指定する必要がある場合に使用できます。
ToArray
やToList
などの関数を呼び出すと、すべての行が強制的に読み込まれるため、 ReadLines
を使用する利点は無効になります。このメソッドを使用する場合は、 foreach
ループまたはLINQを使用してIEnumerable
を列挙することをおforeach
ます。
ファイルの作成
ファイル静的クラス
File
静的クラスのCreate
メソッドを使用することにより、 File
をCreate
することができます。メソッドは、指定されたパスにファイルを作成し、同時にファイルを開き、ファイルの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);
これらのリンクから、 FileMode 、 FileAccess 、および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);
}