Jak psát aplikaci pro systém Windows XP ukládá data uživatele a aplikace pomocí aplikace Visual C++ do správného umístění

Překlady článku Překlady článku
ID článku: 310294 - Produkty, které se vztahují k tomuto článku.
Důležité Tento článek obsahuje informace o úpravě registru. Před jeho úpravou se ujistěte, že máte jeho záložní kopii. Ujistěte se, že víte, jak registr obnovit v případě výskytu problému. Další informace o zálohování, obnovení a úpravách registru získáte v článku znalostní báze Microsoft Knowledge Base:
322756 Postup zálohování a obnovení registru v systému Windows
Poznámka: Microsoft Visual C++ 2008 Microsoft Visual C++ .NET 2002, Microsoft Visual C++ .NET 2003 a Microsoft Visual C++ 2005 podporuje model spravovaný kód, který je poskytován v Microsoft rozhraní.NET Framework a nespravovaná nativní kód modelu Microsoft Windows. Informace v tomto článku platí pouze pro nespravovaný kód Visual C++
Rozbalit všechny záložky | Minimalizovat všechny záložky

Na této stránce

Souhrn

Aplikace pracovat s dvěma typy dokumentů: ty, vytvoří uživatele a které aplikace vytvoří. Aplikace Používejte SHGetFolderPath funkce shell získat platnou složku umístění pro ukládání dat která je specifická pro uživatele a aplikace. Je to důležité pro Windows XP aplikace pro podporu více uživatelů, kteří používají stejný počítač a Chcete-li povolit rychlé přepínání uživatelů.

Tento článek popisuje, jak ukládání uživatelských dat na správné místo v následujících krocích:
  • Vytvoření aplikace typu Win32.
  • Přidat Uložit jako MožnostiSoubor nabídka.
  • Použít standardní Uložit soubor dialogovém okně výchozí na správné umístění.
  • Zkontrolujte správné umístění pro ukládání souboru.
  • Zapamatovat si uživatele předchozí výběr.
  • Zkontrolujte předchozí výběru uživatele.
V následujících krocích, tento článek také popisuje, kde je musí ukládat data aplikací a jak zajistit, že je uložen v vhodné umístění:
  • Klasifikovat data aplikací.
  • Ukládání dat aplikací do správného umístění.
  • Pomocí registru uvážlivě.

Požadavky

Následující seznam obsahuje doporučený hardware, software, síťové infrastruktury, dovednosti, znalosti a aktualizace service Pack, které potřebujete:
  • Systém Windows XP Home Edition nebo Windows XP Professional
  • Visual Studio 2008, Visual Studio 2005 nebo Visual Studio .NET.
  • Předchozí znalost vývoje aplikace Win32

Vytvoření aplikace Win32

Spusťte aplikaci Visual Studio a vytvořit novou aplikaci systému Win32 s názvem SavingData.
  • V aplikaci Visual Studio .NET klepněte na tlačítko Visual C++ Projekty ve skupinovém rámečku Typy projektůa potom klepněte na tlačítkoProjekt Win32 ve skupinovém rámečku Šablony. Přijetí výchozí nastavení aplikace aplikace Průvodce instalací zobrazí.
  • V aplikaci Visual Studio 2005 nebo 2008 klepněte na tlačítko Visual C++ve skupinovém rámečku Typy projektůa potom klepněte na tlačítko Win32 Projekt ve skupinovém rámečku Šablony. Přijmout výchozí nastavení nastavení aplikace.

Přidat do nabídky Soubor možnost uložení

  1. Klepněte na tlačítko Zobrazení zdrojůa potom poklepejte na IDC_SAVINGDATA.
  2. Přidat Uložit jako možnost nabídkySoubor nabídka. IDM_FILE_SAVEAS slouží jako ID položky nabídky.
  3. Vyhledejte proceduru okna WndProc aplikace v rámci SavingData.cppm a přidat nový příkaz případu v rámci oddílu WM_COMMAND ke zpracování Uložit jako možnost nabídky. Volání OnFileSaveAs funkce, kterou vytvoříte v další části. To funkce nepoužívá žádné parametry.

    Váš kód by měl vypadat takto:
    case WM_COMMAND:
        wmId    = LOWORD(wParam);
        wmEvent = HIWORD(wParam);
        // Parse the menu selections:
        switch (wmId)
        {
        case IDM_ABOUT:
            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
            break;
        case IDM_EXIT:
            DestroyWindow(hWnd);
            break;
        case IDM_FILE_SAVEAS:
            OnFileSaveAs(hWnd);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
        }
        break;
    

Použít standardní soubor dialogové okno Uložit výchozí hodnoty do správného umístění

Když uživatel zobrazí aplikace Uložit soubor(nebo Otevřete soubor) dialogové okno poprvé, dialogové okno musí výchozí složky Dokumenty uživatele (nebo potomkem My Dokumenty, například obrázky pro obrazová data a Hudba pro zvuk soubory).

Poznámka: musí nikdy tvrdě kód cestu v rámci aplikace protože nikdy je zaručena jeho fyzickém umístění. Například správce složka Dokumenty může přesunout do umístění v síti.
  1. Horní SavingData.cpp přidejte následující zahrnout příkazy:
    #include <commdlg.h>   // for GetSaveFileName
    #include <shlobj.h>    // for SHGetFolderPath
    					
  2. Přidejte následující prototyp pro funkci OnFileSaveAs :
    void OnFileSaveAs( HWND hWnd );
    					
  3. Vytvořte novou funkci OnFileSaveAs . V rámci této funkce použití SHGetFolderPath funkce ve spojení s identifikátorem CSIDLCSIDL_MYPICTURES načíst správné umístění pro ukládání data obrázku. Umístění této složky předat funkci GetSaveFileName pro standardní zobrazení Uložit souborDialogové okno.

    Váš kód by měl vypadat takto:
    void OnFileSaveAs(HWND hWnd)
    {
       OPENFILENAME openFile;
       TCHAR szPath[MAX_PATH];
       TCHAR szFile[MAX_PATH];
    
        // Initialize OPENFILENAME structure.
        ZeroMemory( &openFile, sizeof(OPENFILENAME) );
        openFile.lStructSize = sizeof(OPENFILENAME);
    
        szFile[0] = '\0';
        openFile.hwndOwner = hWnd;
        openFile.lpstrFile = szFile;
        openFile.nMaxFile = sizeof(szFile)/sizeof(*szFile);
    
        // Default to My Pictures. First, get its path.
        if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_MYPICTURES, 
                                              NULL, 0, szPath ) ) )
        {
           // Set lpstrInitialDir to the path that SHGetFolderPath obtains. 
           // This causes GetSaveFileName to point to the My Pictures folder.
              openFile.lpstrInitialDir = szPath;
        }
        // Display the standard File Save dialog box, defaulting to My Pictures.
        if ( GetSaveFileName( &openFile ) == TRUE )
        {
            // User clicks the Save button.
            // Save the file
        }
        else
        {
           // User cancels the File Save dialog box.
        }
    }
    

Zkontrolujte správné umístění pro ukládání souboru

  1. Stisknutím klávesy F5 sestavte projekt.
  2. Spusťte aplikaci a klepněte na tlačítko Uložit jakoz Soubor nabídka.
  3. Ověřte, že standardní Uložit soubor Dialogové okno pole výchozí složku obrázky jako CSIDL_MYPICTURES určuje.
  4. Klepněte na tlačítko Storno Chcete-li zavřít dialogové okno, a Ukončete aplikaci.

Zapamatovat si výběr předchozí uživatele

Pro pozdější použití Uložit soubor (nebo Otevřete soubor) dialogové okno, je doporučeno dialogové okno výchozí nastavení uživatele dříve vybrané umístění.

Pokud není Zadejte počáteční umístění v rámci struktury NÁZEV_OTEVŘENÉHO_SOUBORU , GetSaveFileName (a GetOpenFileName) zobrazte standardní Uložit soubor nebo Soubor Otevřít dialogové, které odkazuje na složku Dokumenty. Kromě toho, Pokud uživatel má jednu z těchto dialogových oknech předtím použit a byl zvolen jiné než výchozí složky, tyto funkce automaticky nastaví dříve použité složky.

Pro podporu cílení, doporučený osvědčený postup určité umístění (například obrázky) prvním uživatel uloží nebo načte soubor a následně ve výchozím nastavení uživatele dříve vybrané umístění, byste měli použít booleovské proměnné můžete sledovat, zda se jedná o první čas provedení uživatel uložit nebo otevřít operace.
  1. Vytvoření statické BOOL proměnné s názvem bFirstSave v OnFileSaveAs funkce a inicializujte ji na TRUE.
  2. Upravte kód v OnFileSaveAsSHGetFolderPath volat a člen lpstrInitialDir struktury NÁZEV_OTEVŘENÉHO_SOUBORU nastavit pouze v případě, že platí bFirstSave.
  3. Pokud uživatel klepne na tlačítko Uložit vUložit soubor Dialogové okno, sada bFirstSave Chcete-liNEPRAVDA.

    Váš kód by měl vypadat takto:
    void OnFileSaveAs(HWND hWnd)
    {
        OPENFILENAME openFile;
        TCHAR szPath[MAX_PATH];
        TCHAR szFile[MAX_PATH];
        static BOOL bFirstSave = TRUE;
    
        // Initialize OPENFILENAME structure.
        ZeroMemory( &openFile, sizeof(OPENFILENAME) );
        openFile.lStructSize = sizeof(OPENFILENAME);
    
        szFile[0] = '\0';
        openFile.hwndOwner = hWnd;
        openFile.lpstrFile = szFile;
        openFile.nMaxFile = sizeof(szFile)/sizeof(*szFile);
    
        // The first time the user saves a document, default to My Pictures.
        if ( TRUE == bFirstSave )
        {
            if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_MYPICTURES, 
                NULL, 0, szPath ) ) )
            {
                // Set lpstrInitialDir to the path that SHGetFolderPath obtains.
                // This causes GetSaveFileName to point to the My Pictures folder.
                openFile.lpstrInitialDir = szPath;
            }
        }
        // Display standard File Save dialog box, defaulting to My Pictures
        // or the user's previously selected location.
        if ( GetSaveFileName( &openFile ) == TRUE )
        {
            // User clicks Save.
            // Save the file.
            bFirstSave = FALSE;
        }
        else
        {
            // User cancels the File Save dialog box.
        }
    }
    

Zkontrolujte předchozí výběr uživatele

  1. Vytvořte projekt a spusťte aplikaci.
  2. Z Soubor nabídky, klepněte na tlačítko Uložit Jako.
  3. Přejděte do složky Dokumenty ze složky Obrázky složky, vyberte soubor a klepněte na tlačítko Uložit.
  4. Z Soubor nabídky, klepněte na tlačítko Uložit Jako znovu.
  5. Ověřte, že vaše předchozí ve výchozím nastavení dialogové okno Výběr (v tomto případě složky Dokumenty).
  6. Klepněte na tlačítko Storno Chcete-li zavřít dialogové okno, a ukončete aplikaci.
  7. Spusťte aplikaci a klepněte na tlačítko Uložit jakoz Soubor nabídka.
  8. Ověřte, že ve výchozím nastavení dialogového okna zpět do složky Obrázky složka.
  9. Zavřete dialogové okno a ukončete aplikace.

Klasifikovat Data aplikací

Neměli byste ukládat data specifická pro aplikaci (například dočasný soubory, uživatelské předvolby, konfiguračních souborech aplikace a tak dále) v Můj Složka Dokumenty. Místo toho použijte příslušné umístění v systému Windows V registru (data, která není větší než 64 kilobajtů) nebo soubor specifických pro aplikaci, který je umístěn v platných dat aplikace složka.

Je důležité pro uložení dat aplikace do správné umístění, kam chcete povolit více uživatelům pomocí stejného počítače bez poškození nebo přepisování dat a nastavení.

Chcete-li zjistit co nejvíce vhodné místo pro data aplikace, použijte následující kategorie klasifikovat data:
  • Pro každého uživatele (cestovní): Tato kategorie popisuje data aplikací, která je specifická pro konkrétního uživatele a měl by být jako přesunuje mezi uživateli k dispozici počítače v doméně (například vlastní slovník). Poznámka touto nastavení se nevztahuje na aplikace, které nejsou určeny ke spuštění v doméně prostředí.
  • Pro každého uživatele (nepřenosných): Tato kategorie popisuje data aplikací, která je specifická pro určitého uživatele, ale platí pouze pro jeden počítač (například rozlišení monitoru zadáno uživatelem).
  • Pro každý počítač (non-user konkrétní a nepřenosných): Tato kategorie popisuje data aplikací, která platí pro všechny Uživatelé a k určitému počítači (například aplikaci slovník, protokol soubor nebo dočasný soubor).

Ukládání dat aplikací do správného umístění

SHGetFolderPath funkce použijete k načtení správné složky Data aplikací. Ne ukládat data aplikací přímo v této složce. Místo toho použijte funkci PathAppend Přidat podsložku cestu, která vrátí SHGetFolderPath . Ujistěte se, že používají následující konvence:
Společnost Name\Product Name\Product verze
Výsledná úplná cesta může například vypadat takto:
\Documents and Settings\All Users\Application Data\My Company\My Product\1.0
Chcete-li najít správnou složku Data aplikací, vhodné CSIDL hodnoty založené na kategorii data aplikací.
  • Pro každého uživatele (cestovní) dat, použijte hodnotu proměnné CSIDL_APPDATA pro skupinu . Toto výchozí nastavení následující cestu:
    \Documents and Settings\uživatelské jméno> \Application Data
  • Pro každého uživatele (nepřenosných) dat, použijte CSIDL_LOCAL_APPDATA hodnota. Toto výchozí nastavení následující cestu:
    \Documents and Settings\uživatelské jméno> \Local dat
  • Pro každý počítač (non-user konkrétní a nepřenosných) dat, Použijte hodnotu CSIDL_COMMON_APPDATA . Toto výchozí nastavení následující cestu:
    \Documents and Settings\All Users\Application Data
Následující fragment kódu ukazuje, jak otevřít dočasný soubor protokolu, který je umístěn pod CSIDL_COMMON_APPDATA:
include <shlwapi.h>
#pragma comment(lib,"shlwapi.lib")
void CreateTemporaryFile()
{
   TCHAR szPath[MAX_PATH];
   // Get path for each computer, non-user specific and non-roaming data.
   if ( SUCCEEDED( SHGetFolderPath( NULL, CSIDL_COMMON_APPDATA, 
                                    NULL, 0, szPath ) ) )
   {
      TCHAR szTempFileName[MAX_PATH];
      // Append product-specific path - this path needs to already exist
      // for GetTempFileName to succeed.
      PathAppend( szPath, _T("\\My Company\\My Product\\1.0\\") );
      // Generate a temporary file name within this folder.
      if (GetTempFileName( szPath, 
                           _T("PRE"),
                           0,
                           szTempFileName ) != 0 )
      {
         HANDLE hFile = NULL;
         // Open the file.
         if (( hFile = CreateFile( szTempFileName, 
                                   GENERIC_WRITE, 
                                   0, 
                                   NULL, 
                                   CREATE_ALWAYS, 
                                   FILE_ATTRIBUTE_NORMAL, 
                                   NULL )) != INVALID_HANDLE_VALUE )
         {
            // Write temporary data (code omitted).
            CloseHandle( hFile );
         }
      }
      else
          DWORD err = GetLastError();
   }
}

Pomocí registru uvážlivě

Důležité Tento oddíl, metoda nebo úkol obsahuje kroky, které popisují úpravu registru. Při nesprávné úpravě registru však mohou nastat závažné problémy. Proto postupujte přesně podle následujících kroků. Pro zvýšení ochrany proveďte před úpravami zálohu registru. Pokud pak dojde k potížím, budete moci registr obnovit. Další informace o zálohování a obnovení registru získáte v článku znalostní báze Microsoft Knowledge Base:
322756 Postup zálohování a obnovení registru v systému Windows

Registru lze použít také k ukládání malých množství dat aplikace. Pro data, která je větší než 64 kilobajtů (KB) musí použijte složku Data aplikací. Dodržujte následující pokyny při použití k uložení dat aplikace do registru:
  • Malé množství dat uživatele pomocí klíče registru HKEY_CURRENT_USER (HKCU).
  • Malé množství dat v počítači pomocí klíče registru HKEY_LOCAL_MACHINE (HKLM). Aplikace by neměla zapisovat do HKLM za běhu, protože ve výchozím nastavení pouze pro uživatele bez oprávnění správce mají přístup jen pro čtení ke stromu HKLM .
  • V průběhu instalace aplikace nesmějí ukládat více než celkem 128 KB přes HKCU a HKLM.
  • Jsou registrované součásti Component Object Model (COM) pod klíč registru HKEY_CLASSES_ROOT (HKCR). Maximální 128 KB nezahrnuje HKCR.
  • Při zápisu do HKLM nebo HKCUje nutné vytvořit klávesové zkratky pro název společnosti, název produktu, a číslo verze produktu takto:
    HKLM\Software\Company Name\Product Name\Product verze
    HKCU\Software\Company Name\Product Name\Product verze
  • Pro čtení a zápis položek registru pomocí funkcí registru (například RegCreateKeyEx a RegSetValueEx).

Poradce při potížích

  • Aby bylo zajištěno, že aplikace běží v dřívějších verzích Systém Windows kromě Windows XP vždy provedení SHGetFolderPath v Shfolder.dll propojit. Ačkoli systém Windows XP obsahuje SHGetFolderPath v souboru Shell32.dll, nemusí podporovat starší verze systému Windows funkce v rámci této dynamické knihovny (DLL).
  • Shfolder.dll redistribuovatelná součást a může být distribuovat s vašimi aplikacemi.
  • Neukládejte úplné cesty ke složce Dokumenty složka (nebo jiných systémových složek) v rámci aplikace určené místo, jako vzhledem k tomu, že uživatel nebo správce může soubor seznam nejčastěji naposledy použité soubory Změna umístění těchto složek mezi po sobě jdoucích používá aplikace.

Odkazy

Pro jiné horní přístupů Visual C++ .NET společnosti Microsoft Knowledge Base články, navštivte Centrum podpory Visual C++ .NET ve společnosti Microsoft Webový server:
Visual C++ .NET (2002) odborná pomoc
http://support.microsoft.com/default.aspx?xmlid=fh%3BEN-us%3Bvcnet
Další informace o úplnou sadu složek, které lze identifikovat SHGetFolderPath naleznete v následujících Microsoft Platform Software Dokumentace Development Kit (SDK):
CSIDL
http://msdn.microsoft.com/en-us/library/bb762494.aspx
Další informace o prostředí programování obecně naleznete Následující Web společnosti Microsoft Developer Network (MSDN):
Příručka pro programátory prostředí
http://msdn2.microsoft.com/en-us/library/bb776778.aspx

Vlastnosti

ID článku: 310294 - Poslední aktualizace: 20. července 2013 - Revize: 6.0
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
Klíčová slova: 
kbhowtomaster kbnewsgrouplink kbmt KB310294 KbMtcs
Strojově přeložený článek
DŮLEŽITÉ: Tento článek je přeložen pomocí softwaru na strojový překlad Microsoft. Nepřesný či chybný překlad lze opravit prostřednictvím technologie Community Translation Framework (CTF). Microsoft nabízí strojově přeložené, komunitou dodatečně upravované články, a články přeložené lidmi s cílem zajistit přístup ke všem článkům v naší znalostní bázi ve více jazycích. Strojově přeložené a dodatečně upravované články mohou obsahovat chyby ve slovníku, syntaxi a gramatice. Společnost Microsoft není odpovědná za jakékoliv nepřesnosti, chyby nebo škody způsobené nesprávným překladem obsahu nebo jeho použitím našimi zákazníky. Více o CTF naleznete na http://support.microsoft.com/gp/machine-translation-corrections/cs.
Projděte si také anglickou verzi článku: 310294

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