PRB: CreateFile 함수 실패한다 ERROR_SHARING_VIOLATION 오류 메시지가 나타난다

기술 자료 번역 기술 자료 번역
기술 자료: 316609 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

현상

FILE_SHARE_READ 플래그 및 FILE_SHARE_WRITE 플래그를 사용하여 파일을 열 때 CreateFile 함수를 실패하고 다음과 같은 오류 메시지를 반환할 수 있습니다.
ERROR_SHARING_VIOLATION (오류 코드 32)

현재 상태

이것은 의도적으로 설계된 동작입니다.

추가 정보

CreateFile 함수 또는 CreateFile 내부적으로 사용하는 함수를 사용하여 파일을 열 때 공유 위반으로 인해 오류가 발생할 수 있습니다. 파일에 대한 특정 응용 프로그램에만 경우에도 중인 잠재적으로 다른 프로세스가 파일을 동시에 액세스하려고 시도할 수 있습니다. 일반적인 시스템 구성 요소 및 이 문제로 인해 다른 타사 응용 프로그램이 있습니다. 일반적인 시스템 구성 요소 및 타사 응용 프로그램 (예: 바이러스 검색 소프트웨어)이 이 문제를 일으키는.

Microsoft Windows 운영 체제를 동시에 실행되는 여러 응용 프로그램 모양을 제공하는 선점형, 다중 처리 시스템 것입니다. 특정 응용 프로그램 "" 이를 시스템에서 실행 중인 유일한 프로세스 것이 아니며 이를 리소스를 다른 프로세스에 대한 vying 수 있음을 인식해야 합니다. 리소스 처리 때문에 발생할 수 있는 문제는 해결해야 합니다. 파일의 경우 실행 중인 프로세스 리소스를 사용할 권한이 있습니다. 항상 시스템 구성 요소 및 리소스에 대해 동시에 경쟁하는 타사 서비스가 있습니다. 응용 프로그램 시스템의 다른 프로세스와 응용 프로그램 competes 파일에 액세스할 때.

ERROR_SHARING_VIOLATION 두 가지 일반적인 원인은 다음과 같습니다.
  • 공용 공유 데이터 파일이 디스크 상의 특정 파일을 사용하는 응용 프로그램은 여러 가지가 있습니다. 두 번째 응용 프로그램이 같은 파일에 액세스하려고 방법은 호환되지 않는 방식으로 파일을 응용 프로그램에 현재 액세스하고 있습니다. 예를 들어, 파일을 업데이트할 수 있지만 다른 프로세스에서 현재 파일에 쓰는 파일 (FILE_SHARE_READ) 읽기 전용 공유.
  • 데이터 파일이 응용 프로그램에 특정 및 파일이 열려 있는 다른 응용 프로그램에서 예상합니다. 이 시나리오에서는 다른 이유로 짧은 기간 다른 프로세스가 파일을 잠글 수 있습니다.
유틸리티를 경우, 바이러스 검색, 백업 소프트웨어 또는 디스크에 있는 파일로 잠시 동안 잠금을 디스크 최적화, 같은 가장 일반적인 문제가 발생합니다. 다른 응용 프로그램이 경우에도 전체 켜져 사용하여 공유 파일을 열려고 하면 공유 위반이 시도가 실패합니다. 서비스 작업 파일에 대한 단독 액세스가 있어야 하므로 이 결과를 예상할 수 있습니다. 이 문제를 해결하려면 잠시 나중에 시도하십시오. 자주 서비스는 밀리초 안에 파일을 함께 완료되었습니다.

공유 위반 앞에서 설명한 원인을 모두 마찬가지로 처리해야 합니다. 파일을 열 때 수행할 않은 시스템 사용자에게 영향을 또는 인해 시스템이 중단될 경우 항상 공유 위반이 정상적인 방식으로 처리하고 합니다. 간단한 재시도 메커니즘을 사용하여 이 작업을 수행할 수 있습니다. 파일 잠금 해제되어 전에 여러 번 재시도 수행해야 할 수 있습니다.

다음 코드 예제와 이 기술을:
#define MAXRETRIES  5
#define RETRYDELAY  250

HANDLE  hFile     = INVALID_HANDLE_VALUE
DWORD   dwRetries = 0;
BOOL    bSuccess  = FALSE;
DWORD   dwErr     = 0;

do
{
    hFile = CreateFile( szFile,
                        GENERIC_READ,
                        FILE_SHARE_READ | FILE_SHARE_WRITE,
                        NULL,
                        OPEN_EXISTING,
                        FILE_ATTRIBUTE_NORMAL,
                        NULL);
    if ( INVALID_HANDLE_VALUE == hFile )
    {
        dwErr = GetLastError();

        if ( ERROR_SHARING_VIOLATION == dwErr )
        {
            dwRetries += 1;
            Sleep(RETRYDELAY);
            continue;
        }
        else
        {
            // An error occurred.
            break;
        }
    }

    bSuccess = TRUE;
    break;
} while ( dwRetries < MAXRETRIES );

if  ( bSuccess )
{
    // You succeeded in opening the file.
}
else
{
    // Failure occurs. Do graceful error handling.

    // Here, you must notify the user of the failure.

MessageBox( NULL,
            "Tried to update data file but it was already in use",
            "Update error...",
            MB_OK | MB_ICONSTOP );

    // You also want to put the software back in the state it was in
    // on entrance of the current function, as if the user had never
    // tried to do the update.

    // This may also require deallocating any resources that were
    // allocated because of this operation.
}
				
파일이 완료하는 데 시간이 열려 있는 응용 프로그램을 정상적으로 공유 위반 오류를 처리하는 이 방법을 제공합니다. 공유 위반 오류가 나타날 때마다 응용 프로그램의 한 동안 절전 모드 허용 및 다음 다시 합니다. 바이러스 검색 프로그램이나 시스템 서비스가 있는 경우 열린 파일, 바이러스 검색 프로그램이나 시스템 서비스가 하나 또는 두 개의 다시 시도한 후에도 마칠 수 있습니다. 무한 루프가 발생하지 않도록 다시 시도 제한 확인하십시오. 다른 응용 프로그램에서 현재 파일을 열어 (및 파일을 오랫동안 열어 있습니다 경우 루프의 주요 의해 사용자가 알리고 정상적으로 종료하십시오.

속성

기술 자료: 316609 - 마지막 검토: 2006년 11월 21일 화요일 - 수정: 1.2
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Win32 Application Programming Interface
키워드:?
kbmt kbfileio kbkernbase kbprb KB316609 KbMtko
기계 번역된 문서
중요: 본 문서는 전문 번역가가 번역한 것이 아니라 Microsoft 기계 번역 소프트웨어로 번역한 것입니다. Microsoft는 번역가가 번역한 문서 및 기계 번역된 문서를 모두 제공하므로 Microsoft 기술 자료에 있는 모든 문서를 한글로 접할 수 있습니다. 그러나 기계 번역 문서가 항상 완벽한 것은 아닙니다. 따라서 기계 번역 문서에는 마치 외국인이 한국어로 말할 때 실수를 하는 것처럼 어휘, 구문 또는 문법에 오류가 있을 수 있습니다. Microsoft는 내용상의 오역 또는 Microsoft 고객이 이러한 오역을 사용함으로써 발생하는 부 정확성, 오류 또는 손해에 대해 책임을 지지 않습니다. Microsoft는 이러한 문제를 해결하기 위해 기계 번역 소프트웨어를 자주 업데이트하고 있습니다.
더 이상 지원되지 않는 제품의 KB 내용에 대한 고지 사항
이 문서에서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 설명합니다. 따라서 이 문서는 "있는 그대로" 제공되며 업데이트되지 않습니다.

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com