대 "무언가 서면 잠겨" "복사"말할 수 실제로있는 방법은 없습니다. 관련 : How to check for file lock? 및
당신은 단순히 쓰기 위해 열되지 않은 파일의 목록을 표시하려면 Can I simply 'read' a file that is in use?, 당신이 할 수있는을 열려고 시도하여 :
foreach (string file in Directory.EnumerateFiles("C:\folder"))
{
try {
using (var file = file.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) {
Console.WriteLine(file);
}
} catch {
// file is in use
continue;
}
}
을하지만 -주의를 많이.
- 바로 그것에도 불구하고, 파일이 호출이 성공을 의미합니다 파일을 작성하는 과정은 FileShare.Read 사용했을 수
- 뭔가 다른 열 수 있습니다합니다 (
using
블록 끝) 파일 이름을 표시 한 후 에 써졌다.
내가 정확히 당신이 여기까지하는지 모르겠지만, 큐 디렉토리를 공유하는 두 개의 프로세스 같은 소리 : 하나 개의 쓰기, 하나 개의 읽기/처리. 가장 큰 도전은 파일을 작성하는 데 시간이 걸리므로 "읽기"프로세스가 끝나고 전체 파일이 있기 전에 읽는 것을 시도합니다. 공유 모드에 따라 어떤 식 으로든 실패합니다. , 기록 등
이 상황을 처리하는 일반적인 패턴은
Move
같은 원자 파일 작업을 사용하는 것입니다
:
- 을 에서의 임시 디렉토리에 (느리게) 쓰기/복사 작업을 수행 동일한 파일 시스템 (매우 중요) 대기열 디렉토리로
- 일단 완료되면 임시 폴더에서 이동하십시오 ry 디렉토리에서 대기열 디렉토리로 이동하십시오.
이동은 원자 적이므로 파일이 없거나 100 %있을 것입니다. "읽기"프로세스가 부분적으로 파일을 보는 기회가 없습니다.
파일 시스템간에 이동을 수행하면 복사본과 동일하게 작동합니다.
응용 프로그램에서 파일을 복사합니까? 그렇다면 복사 할 각 파일의 이름을 목록에 추가하고 목록에없는 파일을 인쇄 할 수 있습니다. – PoweredByOrange
"현재 복사 중"질문의 맥락에서 "현재"의 정의는 무엇입니까? – Learner
[XY 문제] (http://meta.stackexchange.com/questions/66377/).너 왜 신경 쓰냐? 어떻게 대답을 알면 도움이 될까요? 목록을 만들었지 만 "콘솔"에 표시된 후에 파일이 디렉토리에 "복사"되지 않으면 어떻게됩니까? –