파일 내용을 어떻게 지울 수 있습니까?


80

응용 프로그램이 시작될 때마다 특정 파일의 내용을 지워야합니다. 어떻게하나요?

답변:


131

File.WriteAllText 메서드를 사용할 수 있습니다 .

System.IO.File.WriteAllText(@"Path/foo.bar",string.Empty);

하드 링크 된 파일이 있고를 사용 File.WriteAllText하면 하드 링크가 업데이트되지 않았기 때문에 가끔 (?) 파일이 삭제되는 것처럼 보입니다.
Ciantic

1
이 작업 직후 다른 작업이 파일에 액세스 할 경우에는 그렇게하지 않는 것이 좋습니다. 나는 파일이 코드의 라인, 그리고 원인 후 폐쇄 쓰기를하지 않은 문제에 직면 IO exceptions of file is in use난 당신이 파일 스트림을 통해 수동으로 처리하는 것이 좋습니다, 그래서
deadManN

84

응용 프로그램이 방금 내용을 업데이트 한 경우에도 파일이 새 생성 시간을 표시하지 않기를 원했기 때문에 새 파일만들지 않고 파일 내용지우 려고 한 것입니다.

FileStream fileStream = File.Open(<path>, FileMode.Open);

/* 
 * Set the length of filestream to 0 and flush it to the physical file.
 *
 * Flushing the stream is important because this ensures that
 * the changes to the stream trickle down to the physical file.
 * 
 */
fileStream.SetLength(0);
fileStream.Close(); // This flushes the content, too.

버전을 알고 싶은 경우를 대비하여 .NET 3.5를 사용했습니다.
Abhay Jain

올리브, 질문에 대한 답이 있다면 답으로 표시해 주시겠습니까? 그러나 제안 된 솔루션이 귀하의 경우에 작동하지 않는 경우에도 저희에게 알려주십시오.
Abhay Jain

5
+1 이것은 먼저 파일 잠금을 획득하고 파일 속성을 안전하게 확인하고 마지막으로 내용을 지우는 유일한 방법입니다.
mafu

1
이것이 바로 내가 필요로하는 것입니다 ... 사용자에게 간단한 줄 단위 메시지를 제공하기 위해 응용 프로그램과 통신하는 서비스가 필요하며이를 통해 파일 잠금을 유지하고 메시지를 지워 서비스 앱을 방지 할 수 있습니다. 메시지를 삽입하거나 실수로 삭제하거나 메시지를 복제하지 않도록합니다.
phillk6751 2014

2
using 블록에서 파일 스트림을 만드는 것이 좋지 않습니까? 그러면 자동으로 스트림도 닫힙니다.
Wuolennaj

12

FileMode.Truncate파일을 만들 때마다 사용하십시오 . 또한 File.Create내부에 try catch.


2

이 작업을 수행하는 가장 간단한 방법은 아마도 응용 프로그램을 통해 파일을 삭제하고 동일한 이름으로 새 파일을 만드는 것입니다. 더 간단한 방법으로 응용 프로그램이 새 파일로 덮어 쓰도록 만들 수 있습니다.


1
삭제 직후 파일을 생성하려고하면 문제가 발생할 수 있습니다. 때때로 OS는 파일이 여전히 존재한다고 "생각"하기 때문에 파일 생성에 실패합니다.
Dmitrii Lobanov 2011 년

@Dmitry Lobanov-[나는 이것이 오래된 스레드라는 것을 안다]. 정당한 이유가없는 한 운영 체제가 파일이 여전히 존재한다고 생각하는 경우가 있습니다. 그렇게한다면 매우 열악한 OS가 될 것입니다. 훨씬 더 가능성이 높은 것은 무언가가 여전히 기존 파일에서 열린 핸들을 가지고 있다는 것입니다. 파일을 닫을 때주의하지 않으면 (예를 들어 폐기를 보장하기 위해 '사용'을 사용하여) 자신의 소프트웨어 일 수도 있습니다. 바이러스 백신도 될 수 있습니다. 그래도 결론에 동의하십시오. 나는 FileMode.Truncate가 갈 길이라고 생각합니다.
Steve Kidd 2015

2

가장 쉬운 방법은 다음과 같습니다.

File.WriteAllText(path, string.Empty)

그러나 FileStream첫 번째 해결책은 던질 수 있기 때문에 사용하는 것이 좋습니다.UnauthorizedAccessException

using(FileStream fs = File.Open(path,FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
     lock(fs)
     {
          fs.SetLength(0);
     }
}

1

같은 것을 사용해보십시오

File.Create

지정된 경로에 파일을 만들거나 덮어 씁니다.


질문에 대한 좋은 생각이 아닙니다. 파일에 이미있는 데이터를 제거하지 않습니다. 새 데이터의 길이로만 덮어 씁니다. 따라서 이전 데이터> 새 데이터 인 경우 두 가지를 혼합하게됩니다.
namford
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.