수색…


소개

파일을 관리합니다.

통사론

  • 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 , FileAccessFileShare 의 열거 형을 확인할 수 있습니다. 그들이 기본적으로 의미하는 것은 다음과 같습니다 :

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


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow