2012-10-20 6 views
1

파일이 존재하면 먼저 삭제하고 파일을 쓰고 싶습니다. 코드는 다음과 같습니다.기존 파일을 삭제하지 않음

try 
{ 
    if (File.Exists("qwe.mp4")) 
    { 
     File.Delete("qwe.mp4"); 
    } 
    File.WriteAllBytes("qwe.mp4", encodedDataAsBytes);     
} 

그러나 프로그램을 실행하면 기존 데이터는 삭제되지 않지만 이전 데이터는 다음 데이터에 추가됩니다. (첫 번째 데이터는 2 초 만에 새 데이터를 추가 한 후 4 초가됩니다). 새로운 데이터는 처음 2 초만 재생할 수 있고 다른 2 초는 읽을 수 없다는 의미로 읽을 수는 없습니다.

어떻게 해결해야합니까? 나는 기존의 파일을 영구적으로 삭제하고 새로운 파일로 새로운 파일을 만들고 싶다.

+2

같은 FileMode.Create와 파일 스트림을 작성하지 왜 덮어 쓸 수'File.WriteAllBytes'는 파일의 내용을 덮어 씁니다. 데이터가 파일에 추가되면 다른 코드가 실행 중입니다. 제안 : 디버거를 단계별로 실행하십시오. – Richard

+0

File.WriteAllBytes, 새 파일을 만들고 지정된 바이트 배열을 파일에 쓴 다음 파일을 닫습니다. 대상 파일이 이미 있으면 덮어 씁니다. – andy

답변

4

File.WriteAllBytes()은 이미 존재하는 경우 파일을 덮어 쓰므로 명시 적으로 삭제하지 않아도됩니다.

+0

나는 그 행동을 보지 못했다. 그것은 워드 프로세서 말한다하지만 명시 적으로 파일을 삭제 한 다음 WriteAllBytes() 호출해야 할 것으로 보인다. –

1

당신은 당신이 올바른 파일을보고하고 있는지 모두 File.ExistsFile.Delete

당신은 항상 절대 경로를 사용해야에 대한 파일의 전체 경로를 포함해야

public static bool Exists(
    string path 
) 

또는 그렇지 않으면 파일을 덮어 쓰는 경우 일 수 있습니다. File.WriteAllBytes 같이 새 파일을 만들고 지정된 바이트 배열을 파일에 쓴 다음 파일을 닫습니다.

대상 파일이 이미 있으면 덮어 씁니다.

+1

'상대 경로 정보는 현재 작업 디렉토리에 상대적인 것으로 해석됩니다. '그래서 이것은 정확히 사실이 아니지만 올바른 파일을보고 있는지 항상 절대 경로 *를 사용해야합니다. –

0

콘텐츠를 기존하려면 단순히이

using (FileStream my_stream = new FileStream("filename.mp4", FileMode.Create, FileAccess.Write)) { 
    using (BinaryWriter my_writer = new BinaryWriter(my_stream)) { 
    my_writer.Write(my_data); 
    } 
} 
관련 문제