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는 파일을 덮어 씁니다. |
본문 | 쓰거나 저장할 텍스트입니다. |
내용 | 쓰여질 문자열 모음. |
출처 | 사용할 파일의 위치입니다. |
목적지 | 파일을 이동할 위치입니다. |
비고
- 항상
Stream
객체를 닫아야합니다. 이 작업은 위와 같이using
블록을using
하거나myStream.Close()
수동으로 호출using
수행 할 수 있습니다. - 현재 사용자에게 파일을 만들려는 경로에 필요한 권한이 있는지 확인하십시오.
-
@"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
메서드를 사용하면 파일에 내용을 한 줄 씩 쓸 수 있습니다.
StreamWriter 개체가 범위를 벗어나 파일이 닫히 자마자 처리되도록하는 using
키워드를 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는 생성자에서 두 번째 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);
IEnumerable<String>
을 두 번째 매개 변수로받는 System.IO.File.WriteAllLines 함수를 사용할 수도 있습니다 (이전 예제의 단일 문자열과 반대). 이를 통해 선 배열에서 내용을 쓸 수 있습니다.
string[] lines = { "My first string", "My second string", "and even a third string" };
System.IO.File.WriteAllLines(@"C:\MyFolder\OutputFile.txt", lines);
IEnumerable을 통해 한 줄씩 파일을 게으른 읽기
대용량 파일로 작업 할 때 System.IO.File.ReadLines
메서드를 사용하여 파일의 모든 줄을 IEnumerable<string>
으로 읽을 수 있습니다. 이는 System.IO.File.ReadAllLines
과 비슷하지만 전체 파일을 한 번에 메모리에로드하지 않기 때문에 대용량 파일로 작업 할 때 더욱 효율적입니다.
IEnumerable<string> AllLines = File.ReadLines("file_name.txt", Encoding.Default);
File.ReadLines의 두 번째 매개 변수는 선택 사항입니다. 인코딩을 지정해야 할 때 사용할 수 있습니다.
ToArray
, ToList
또는 다른 유사한 함수를 호출하면 모든 행을 동시에로드해야하므로 ReadLines
사용의 이점이 무효화됩니다. 이 메서드를 사용하는 경우 foreach
루프 또는 LINQ를 사용하여 IEnumerable
을 열거하는 것이 가장 좋습니다.
파일 만들기
정적 클래스 파일
File
정적 클래스의 Create
메서드를 사용하여 File
을 만들 수 있습니다. 메서드는 지정된 경로에 파일을 만들고 동시에 파일을 열고 파일의 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 : 파일의 색인 만 변경합니다 (파일이 같은 볼륨으로 이동 된 경우). 이 작업은 파일 크기에 상대적 시간이 필요하지 않습니다.
참고 2 : 대상 경로의 기존 파일을 재정의 할 수 없습니다.
파일 삭제
string path = @"c:\path\to\file.txt";
File.Delete(path);
파일이 존재하지 않으면 Delete
가 예외를 throw하지 않지만 지정된 경로가 유효하지 않거나 호출자에게 필요한 권한이없는 경우 예외가 발생합니다. try-catch 블록 내에서 Delete
호출을 항상 랩하고 예상되는 모든 예외를 처리해야합니다. 경쟁 조건이 발생할 수있는 경우 lock 문 안쪽의 논리를 래핑하십시오.
파일 및 디렉토리
디렉토리의 모든 파일 가져 오기
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);
}