PRB: ERROR_SHARING_VIOLATION chybová zpráva funkce CreateFile selhání

Překlady článku Překlady článku
ID článku: 316609 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Příznaky

Při otevření souboru s FILE_SHARE_READ příznak a příznak FILE_SHARE_WRITE funkce CreateFile může selhat a vrátit následující chybová zpráva:
ERROR_SHARING_VIOLATION (kód chyby 32)

Prohlášení

Toto chování je záměrné.

Další informace

Při otevření souboru pomocí funkce CreateFile nebo funkce, které používá interně CreateFile zaznamenat neočekávané selhání z důvodu narušení sdílení. I když je soubor pouze pro konkrétní aplikace, jsou potenciálně jiné procesy, které může pokusit o přístup k souboru současně. Existují běžné systémové součásti a také aplikace jiných výrobců, které mohou způsobit tento problém. Existují běžné systémové součásti a také aplikace jiných výrobců (jako je například antivirový software), která tento problém způsobují.

Operační systém Microsoft Windows je preemptivní, systém s více procesy, které poskytuje vzhled současně spuštěnou mnoho aplikací. Konkrétní aplikace musí Uvědomte "", že není pouze proces spuštěný v systému a jeho vying pro prostředky s ostatními procesy. Problémy, které mohou nastat kvůli zpracování prostředku musí být adresována. Z soubory spuštěný proces má právo pokusu o použití prostředku. Existují vždy systémové součásti a služby třetí strany současně soutěžit pro zdroje. Když aplikace pokusí získat přístup k souborům v systému, které aplikace competes s jinými procesy.

Existují dva běžné příčiny ERROR_SHARING_VIOLATION:
  • Existuje více aplikací, které používají určitý soubor na disku (běžné soubory sdílených dat). Aplikace je aktuálně přístup k souboru způsobem, který je nekompatibilní s způsobem druhé aplikace pokusí o přístup stejný soubor. Například můžete chtít soubor aktualizovat, ale jiný proces aktuálně zápisu do souboru a pouze sdílení souboru pro čtení (FILE_SHARE_READ).
  • Soubor je datový soubor aplikace a očekáváte mít soubor otevřít jiné aplikace. V tomto scénáři může jiných procesů uzamčení souboru pro krátké doby trvání jiných důvodů.
Nejběžnější problém nastane, když nástroj, například virů, zálohování softwaru nebo Optimalizátor disku, které uzamkne soubor na disku krátkou dobu. Pokud jiná aplikace pokusí otevřít soubor, i s úplnou sdílení zapnuta, pokus se nezdaří s narušení sdílení. Tento výsledek lze očekávat, protože služba musí mít výhradní přístup pro dobu trvání operace na souboru. Chcete-li tento problém vyřešit, zkuste znovu krátkou dobu později. Služba je vyplněné často, soubor v záležitosti milisekund.

Obě příčiny pro sdílení porušení výše popsaných musí být podobně zpracován. Při otevření souboru jste musí vždy zpracovávat narušení sdílení bezproblémové způsobem tak, aby není ovlivnit uživatele systému nebo způsobit selhání systému. To lze provést pomocí mechanismu jednoduché opakování. Pravděpodobně provádět více opakování před soubor je odemčena.

Následující ukázka kódu znázorňuje tuto techniku:
#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.
}
				
Tato metoda pro sdílení chyba narušení řádně zpracování poskytuje aplikace, která má soubor otevřen čas dokončení. Při každém příjmu sdílení chyba narušení musíte povolit aplikace do režimu spánku chvíli a akci opakujte. Pokud má virů nebo systémová služba může po jedné nebo dvou opakování dokončení otevřete soubor, virus skeneru nebo systémová služba. Zkontrolujte, zda omezit opakování předejít nekonečné smyčce. Pokud jiná aplikace aktuálně má soubor otevřen (a může ponechat soubor otevřít dlouho), informovat uživatele podle pevnosti smyčky a řádně ukončit.

Vlastnosti

ID článku: 316609 - Poslední aktualizace: 21. listopadu 2006 - Revize: 1.2
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Win32 Application Programming Interface
Klíčová slova: 
kbmt kbfileio kbkernbase kbprb KB316609 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:316609
Právní omezení pro obsah znalostní báze týkající se produktů, jejichž podpora byla ukončena
Tento článek byl napsán o produktech, pro které společnost Microsoft již neposkytuje nadále podporu. Článek je tedy nabízen v takovém stavu, v jakém je, a nebude již nadále aktualizován.

Dejte nám zpětnou vazbu

 

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