[C#] C #에서 빈 파일 만들기

C # /. NET에서 빈 파일을 만드는 가장 간단하고 표준적인 방법은 무엇입니까?

내가 지금까지 찾을 수있는 가장 간단한 방법은 다음과 같습니다.

System.IO.File.WriteAllLines(filename, new string[0]);



답변

사용 File.Create하면 파일이 열린 상태로 유지되며 원하는 파일이 아닐 수도 있습니다.

당신은 사용할 수 있습니다 :

using (File.Create(filename)) ;

약간 이상하게 보입니다. 대신 중괄호를 사용할 수 있습니다.

using (File.Create(filename)) {}

또는 Dispose직접 전화하십시오 .

File.Create(filename).Dispose();

어느 쪽이든, 여러 곳에서 이것을 사용하려면 도우미 메소드로 감싸는 것을 고려해야합니다.

public static void CreateEmptyFile(string filename)
{
    File.Create(filename).Dispose();
}

호출하는 것을 참고 Dispose대신 사용하는 직접 using유일한 방법은 – 문하는 것은 정말 지금까지 내가 말할 수있는 여기에 많은 차이가되지 않습니다 스레드가 호출 사이에 중단 된 경우 차이가 확인 File.Create및 호출 Dispose. 해당 경쟁 조건이 존재하는 경우 값이 반환되기 직전에 메소드의 끝에서 스레드가 중단 된 경우 버전 에도 존재 한다고 생각합니다 …usingFile.Create


답변

File.WriteAllText("path", String.Empty);

또는

File.CreateText("path").Close();


답변

System.IO.File.Create(@"C:\Temp.txt");

다른 사람들이 지적 했듯이이 객체를 폐기하거나 빈 using 문으로 감싸 야합니다.

using (System.IO.File.Create(@"C:\Temp.txt"));


답변

리턴 된 오브젝트에서 메소드를 체인화 할 수 있으므로 단일 명령문에서 방금 연 파일을 즉시 닫을 수 있습니다.

File.Open("filename", FileMode.Create).Close();


답변

실수로 기존 파일을 덮어 쓰지 않으려면 다음을 사용하십시오.

using (new FileStream(filename, FileMode.CreateNew)) {}

… 파일이 이미 존재하는 경우 발생할 IOException을 처리하십시오.

File.Create다른 답변에서 제안 된, 파일이 이미 존재하는 경우의 내용을 덮어 씁니다. 간단한 경우에는을 사용하여이를 완화 할 수 File.Exists()있습니다. 그러나 여러 스레드 및 / 또는 프로세스가 동일한 폴더에 동시에 파일을 작성하려고하는 시나리오에서는보다 강력한 것이 필요합니다.


답변

빈 파일을 만드는 다소 일반적인 사용 사례는보다 복잡한 프로세스 통신이없는 경우 다른 프로세스에서 발생하는 다른 작업을 트리거하는 것입니다. 이 경우 파일 생성을 외부 세계의 관점에서 원자 적으로 만드는 데 도움이 될 수 있습니다 (특히 트리거되는 것이 트리거를 “소비”하기 위해 파일을 삭제하는 경우).

따라서 만들려는 파일과 동일한 디렉토리에 정크 이름 (Guid.NewGuid.ToString ())을 만든 다음 임시 이름에서 원하는 이름으로 File.Move를 수행하면 도움이됩니다. 그렇지 않으면 파일 존재를 확인한 다음 트리거를 삭제하는 트리거 된 코드는 파일이 완전히 닫히기 전에 파일이 삭제되는 경합 상태가 될 수 있습니다.

임시 파일을 같은 디렉토리 (및 파일 시스템)에두면 원하는 원 자성을 얻을 수 있습니다. 이것은 같은 것을 제공합니다.

public void CreateEmptyFile(string path)
{
    string tempFilePath = Path.Combine(Path.GetDirectoryName(path),
        Guid.NewGuid.ToString());
    using (File.Create(tempFilePath)) {}
    File.Move(tempFilePath, path);
}


답변

Path.GetTempFileName ()은 고유 한 이름의 빈 파일을 만들고 경로를 반환합니다.

경로를 제어하고 임의의 파일 이름을 얻으려면 GetRandomFileName을 사용하여 파일 이름 문자열을 반환하고 Create와 함께 사용할 수 있습니다

예를 들면 다음과 같습니다.

string fileName=Path.GetRandomFileName();
File.Create("custom\\path\\" + fileName);