2011-02-09 2 views
2

파일을 읽고 데이터베이스에 삽입하는 응용 프로그램을 사용하고 있습니다. 웬일인지, 우리는 창조 시간을 특정의 시간으로 설정했다. 파일을 만들 때 응용 프로그램은 생성 시간을 변경하기 전에 파일을 선택합니다. 어쨌든 우리가 생성 시간을 변경할 때까지 파일을 잠글 수 있습니까?C# 파일 잠금 방법

다른 프로세스에서 파일을 사용 중이거나 파일을 보관할 때 File.SetCreationTime에 오류가 발생했습니다.

//Copy signal file 
s = filePath + "s"; 
newS = targetFullPath2 + "s"; 
File.Copy(s, newS, true); 
// 
//new creation ts 
dtFileCreation = File.GetCreationTime(s); 
//retain creation time 
File.SetCreationTime(newS, dtFileCreation); 

+0

코드에 C#을 잠금을 사용하여 작업을 doesnot. –

+3

'lock'키워드는 파일 잠금과 아무 관련이 없습니다. 그래서 그 이유가 있습니다. 이 기능은 모두 스레드 동기화에 관한 것입니다. –

답변

4

일반적인 해결책은 다른 디렉토리 또는 다른 이름으로 파일을 생성 한 다음 (타임 스탬프를 설정 한 후) 다른 프로세스가 파일을 가져올 수있을 때 파일을 이동하거나 이름을 변경하는 것입니다. 이동/이름 바꾸기는 NTFS에서의 원 자성 작업입니다 (물론 별도의 파티션간에 파일을 이동하지 않는 한). 예를 들어

:

s = filePath + "s"; 
newS = targetFullPath2 + "s"; 
File.Copy(s, newS + "_", true); // add the _ so the other process 
            // doesn’t “see” the file yet 

dtFileCreation = File.GetCreationTime(s); 
File.SetCreationTime(newS + "_", dtFileCreation); 

// We’re done with the file, now rename it to its intended final name 
File.Move(newS + "_", newS); 
+0

고마워요. 너는 내 하루를 구했다. –

1

이 오류는 다른 사람 (사용자 또는 다른 프로그램 일 수 있음)이 파일을 잠그고 있음을 나타냅니다. 따라서 파일을 잠그면 문제가 해결되지 않을 것이라고 생각합니다. 어떤 종류의 파일입니까? 코드가 파일을 읽고 스트림이 끝난 후 닫는 것을 잊어 버렸습니까?