> 백엔드 개발 > C++ > '파일 사용 중' 오류를 방지하기 위해 복사하기 전에 파일 완료를 확인하는 방법은 무엇입니까?

'파일 사용 중' 오류를 방지하기 위해 복사하기 전에 파일 완료를 확인하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2025-01-04 16:41:39
원래의
386명이 탐색했습니다.

How to Ensure File Completion Before Copying to Prevent

복사 전 파일 완료 보장

FileSystemWatcher를 사용하여 디렉터리에서 파일 생성을 감지하고 이후 복사하는 시나리오의 경우 다른 위치로 이동하는 경우 대용량 파일(>10MB)이 관련된 경우 문제가 발생합니다. 파일 생성이 완료되기 전에 복사 프로세스가 시작되어 "파일을 다른 프로세스에서 사용하고 있기 때문에 복사할 수 없습니다"라는 오류가 발생할 수 있습니다.

해결 방법:

알려진 유일한 해결 방법은 복사 작업을 시작하기 전에 파일이 잠겨 있는지 확인하는 것입니다. 이는 파일이 더 이상 잠겨 있지 않음을 나타내는 false를 반환할 때까지 파일이 사용 중인지 반복적으로 확인하는 기능을 통해 달성할 수 있습니다.

방법 1(직접 복사):

private bool IsFileLocked(FileInfo file)
{
    FileStream stream = null;

    try
    {
        stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
    }
    catch (IOException)
    {
        // File still being written, processed, or doesn't exist
        return true;
    }
    finally
    {
        if (stream != null)
            stream.Close();
    }

    // File not locked
    return false;
}
로그인 후 복사

방법 2:

const int ERROR_SHARING_VIOLATION = 32;
const int ERROR_LOCK_VIOLATION = 33;
private bool IsFileLocked(string file)
{
    // Check destination file status
    if (File.Exists(file))
    {
        FileStream stream = null;
        try
        {
            stream = File.Open(file, FileMode.Open, FileAccess.ReadWrite, FileShare.None);
        }
        catch (Exception ex2)
        {
            int errorCode = Marshal.GetHRForException(ex2) & ((1 << 16) - 1);
            if ((ex2 is IOException) && (errorCode == ERROR_SHARING_VIOLATION || errorCode == ERROR_LOCK_VIOLATION))
            {
                return true;
            }
        }
        finally
        {
            if (stream != null)
                stream.Close();
        }
    }
    return false;
}
로그인 후 복사

위 내용은 '파일 사용 중' 오류를 방지하기 위해 복사하기 전에 파일 완료를 확인하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿