Momentálne ste offline a čaká sa, kým sa znova pripojíte na internet

Ako písať aplikácie Windows XP, v ktorom sú uložené údaje používateľa a aplikácia správneho umiestnenia pomocou Visual C ++

DÔLEŽITÉ: Tento článok je preložený pomocou softvéru na strojový preklad od spoločnosti Microsoft a možno ho opraviť prostredníctvom technológie Community Translation Framework (CTF). Microsoft ponúka strojovo preložené články, články upravené komunitou aj články preložené prekladateľmi, aby zabezpečil prístup ku všetkým článkom databázy Knowledge Base vo viacerých jazykoch. Strojovo preložené články aj upravené články môžu obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky. Microsoft nenesie zodpovednosť za akékoľvek nepresnosti, chyby alebo škody spôsobené neprávnym prekladom obsahu alebo jeho použitím zo strany našich zákazníkov. Ďalšie informácie o technológii CTF nájdete na lokalite http://support.microsoft.com/gp/machine-translation-corrections/sk.

Pokiaľ chcete vidieť anglickú verziu článku, kliknite sem: 310294
Dôležité Tento článok obsahuje informácie o úprave databázy registry. Uistite sa, že ste zálohovať databázu registry pred úpravou je. Uistite sa, že viete, ako obnoviť databázu registry, ak sa vyskytne problém. Ďalšie informácie o tom, ako zálohovať, obnovení a úprave databázy registry nájdete po kliknutí na nasledovné číslo článku publikovaného v databáze Microsoft Knowledge Base:
322756 Ako zálohovať a obnovenie databázy registry v systéme Windows
Poznámka Microsoft Visual C++ .NET 2003, Microsoft Visual C++ 2005 Microsoft Visual C++ .NET 2002 a Microsoft Visual C++ 2008 podporuje spravovaný kód model, ktorý je poskytovaný Microsoft.NET Framework a nespravovaná natívny Microsoft Windows kód modelu. Informácie v tomto článku platí iba pre nespravované Visual C ++ kód
Súhrn
Aplikácie pracovať s dvoma typmi dokumentov: tých, používateľ vytvorí a tie, ktoré aplikácia vytvorí. Vaše aplikácie mali použiť funkciu SHGetFolderPath škrupiny načítať platný priečinok umiestnenie na ukladanie dát ktoré sú špecifické pre používateľa a aplikácie. To je zásadný pre Windows XP aplikácií, ktoré podporujú viac užívateľov, ktorí používajú rovnaký počítač a aby používatelia mohli rýchlo prepínať.

Tento článok popisuje, ako ukladanie užívateľských dát na správnom mieste v nasledujúcich krokoch:
  • Vytvorenie aplikácie Win32.
  • Pridať Uložiť ako možnosťSúbor ponuka.
  • Použiť štandarde Uložiť súbor dialógové okno predvolené na správne miesto.
  • Skontrolujte správny súbor uložiť umiestnenie.
  • Zapamätať si užívateľa predchádzajúci výber.
  • Overenie používateľa predchádzajúci výber.
V nasledujúcich krokoch, tento článok tiež popisuje, kde môžete musíte uložiť žiadosť údaje a ako zabezpečiť, že je uložený v vhodných miestach:
  • Klasifikáciu údajov aplikácie.
  • Ukladanie údajov aplikácie na správnom mieste.
  • Pomocou databázy registry uvážlivo.

Požiadavky

Nasledujúci zoznam popisuje odporúčaný hardvér, softvér, sieť infraštruktúry, zručnosti, vedomosti a balíky service pack, ktoré budete potrebovať:
  • Windows XP Home Edition alebo Windows XP Professional
  • Visual Studio 2008, vizuálne Sudio 2005 alebo Visual Studio .NET.
  • Predchádzajúcej znalosti systému Win32 aplikácií

Vytvorenie Win32 aplikácie

Spustiť Visual Studio a vytvorte novú žiadosť Win32 s názvom SavingData.
  • V Visual Studio .NET, kliknite Programovacieho jazyka Visual C++ Projekty podľa Typy projektov, a potom kliknite na tlačidloProjekt Win32 podľa Šablóny. Prijať predvolené nastavenie aplikácie Aplikácia Sprievodca inštaláciou Zobrazuje.
  • V Visual Studio 2005 alebo 2008, kliknite Programovacieho jazyka Visual C++podľa Typy projektov, a potom kliknite na tlačidlo Win32 Projekt podľa Šablóny. Prijmite predvolené nastavenia aplikácie.

Pridať uložiť ako možnosť ponuky Súbor

  1. Kliknite na tlačidlo Zobrazenie prostriedkov, a potom dvakrát kliknite na IDC_SAVINGDATA.
  2. Pridať Uložiť ako možnosť ponukySúbor ponuka. Použitie IDM_FILE_SAVEAS ako identifikácia položky menu.
  3. Vyhľadajte aplikácie WndProc okno postup v rámci SavingData.cppm a pridajte nový prípad vyhlásenie v rámci sekcie WM_COMMAND na spracovanie Uložiť ako možnosť menu. Volanie OnFileSaveAs funkciu, ktorá bude vytvárať v ďalšej časti. Toto Funkcia má bez parametrov.

    Kód by mal vyzerať napríklad 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žite štandardný súbor dialógové okno Uložiť predvolené na správne miesto

Keď používateľ zobrazuje aplikácie Uložiť súbor(alebo Otvoriť súbor) dialógové okno prvýkrát dialógového okna musí predvolený priečinok Moje dokumenty používateľa (alebo potomok môj Dokumenty, ako obrazových dát, obrázky a hudba pre audio súbory).

Poznámka: musíte nikdy tvrdo kód cestu do vašej aplikácie, pretože nikdy nemôže zaručiť jeho fyzické umiestnenie. Napríklad Správca môže premiestniť priečinok Moje dokumenty v sieťovom umiestnení.
  1. V hornej časti SavingData.cpp, pridajte nasledujúce zahrnúť vyhlásenie:
    #include <commdlg.h>   // for GetSaveFileName#include <shlobj.h>    // for SHGetFolderPath					
  2. Pridajte nasledujúci prototyp OnFileSaveAs funkcie:
    void OnFileSaveAs( HWND hWnd );					
  3. Vytvoriť novú funkciu OnFileSaveAs . V rámci tohto funkciu, použite funkciu SHGetFolderPath v spojení s identifikátorom CSIDL_MYPICTURES CSIDL získať správny priečinok umiestnenie na ukladanie údaje obrázka. Odovzdať GetSaveFileName funkcie pre zobrazenie štandardné umiestnenie tohto priečinka Uložiť súbordialógové okno.

    Kód by mal vyzerať napríklad 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.    }}

Skontrolujte správny súbor uložiť umiestnenie

  1. Stlačením klávesu F5 stavať projektu.
  2. Spustenie aplikácie a kliknite na Uložiť akood Súbor ponuka.
  3. Overiť, že štandard Uložiť súbor dialógové okno poľa predvolený priečinok Obrázky, ako určuje CSIDL_MYPICTURES .
  4. Kliknite na tlačidlo Zrušiť Ak chcete zavrieť dialógové okno, a Zatvorte aplikáciu.

Zapamätať si užívateľa predchádzajúci výber

Pre následné využitie Uložiť súbor (alebo Otvoriť súbor) dialógovom odporúča dialógového okna predvolené užívateľské predtým vybraté umiestnenie.

Ak nemáte dodávky pôvodný priečinok v rámci OPENFILENAME štruktúry, GetSaveFileName (a GetOpenFileName) displej štandard Uložiť súbor alebo Súbor Otvorené dialógové okno, ktoré ukazuje na priečinok Moje dokumenty. okrem toho Ak používateľ používa jedna z týchto dialógových predtým a zvolil predvolený priečinok, tieto funkcie automaticky Predvolenie predtým použiť priečinok.

Na podporu Odporúčaná osvedčených postupov so zameraním umiestnenie konkrétny priečinok (napríklad obrázky) prvýkrát používateľ uloží alebo načíta súbor a následne Predvolenie používateľa vybratý miesto, / / booleovské ukazovatele by malo používať sledovať, či toto je prvá čas používateľ vykonal uložiť alebo operácia otvorenia.
  1. Vytvorenie statického BOOL premenná s názvom bFirstSave vo funkcii OnFileSaveAs a inicializovať True.
  2. Upravte kód do OnFileSaveAs volať SHGetFolderPath a lpstrInitialDir člen OPENFILENAME štruktúra, iba ak bFirstSave je pravda.
  3. Ak používateľ klikne na tlačidlo Uložiť vUložiť súbor dialógové okno, nastaviť bFirstSave naFALOŠNÉ.

    Kód by mal vyzerať napríklad 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.    }}

Overenie používateľa predchádzajúci výber

  1. Vybudovať projektu, a spustite aplikáciu.
  2. Od Súbor ponuky, kliknite na tlačidlo Uložiť Ako.
  3. Prehľadávať z priečinka obrázky do priečinka dokumenty priečinok, vyberte súbor a kliknite na Uložiť.
  4. Od Súbor ponuky, kliknite na tlačidlo Uložiť Ako znova.
  5. Overiť, že dialógovom okne predvolené predchádzajúce výber (v tomto prípade, moje dokumenty).
  6. Kliknite na tlačidlo Zrušiť Zatvorte dialógové okno, a zatvorte aplikáciu.
  7. Spustenie aplikácie a kliknite na Uložiť akood Súbor ponuka.
  8. Overiť, že dialógovom okne predvolené späť na obrázky priečinok.
  9. Zatvorte dialógové okno a skončiť aplikáciu.

Klasifikáciu údajov aplikácie

Ste nemali ukladať údaje špecifické pre aplikáciu (napríklad dočasné súbory, užívateľské preferencie, konfiguračné súbory aplikácie a podobne) v mojom Priečinok dokumenty. Namiesto toho použite buď vhodné umiestnenie v systéme Windows Register (údaje, ktoré nepresahuje 64 kilobajtov) alebo konkrétnu aplikáciu súboru, ktorý sa nachádza v platných údajov aplikácie priečinok.

Je to dôležité pre ukladanie údajov aplikácie v správnom umiestnenie umožňuje niekoľko ľudí používať rovnaký počítač bez kaziť, alebo prepísanie navzájom dát a nastavení.

Určiť najviac vhodné miesto pre vaše údaje z prihlášky, pomocou nasledovných kategórií klasifikáciu údajov:
  • Pre každého používateľa (roaming): Táto kategória opisuje, aplikácie dáta, ktorá je špecifická pre konkrétneho používateľa a mali by byť dostupné užívateľovi, ako on alebo ona sa pohybuje medzi počítače v doméne (napríklad vlastný slovník). Poznámka to nastavenie sa nevzťahuje na žiadosti, ktoré nie sú navrhnuté na spustenie v doméne prostredia.
  • Pre každého používateľa (roaming): Táto kategória opisuje, aplikácie dáta, ktorá je špecifická pre konkrétneho používateľa ale platí iba na jednom počítači (napríklad rozlíšenie monitora zadaný používateľom).
  • Pre každý počítač (non užívateľ špecifické a - roamingu): Táto kategória opisuje, aplikácie dáta, ktorá sa vzťahuje na všetky užívateľov a pre konkrétny počítač (napríklad aplikáciu slovník, denník súbor alebo dočasný súbor).

Ukladanie údajov aplikácie na správnom mieste

Funkcia SHGetFolderPath umožňuje získať správny priečinok Application Data. ne- ukladanie dát aplikácie priamo do tohto priečinka. Namiesto toho použite funkciu PathAppend pripojiť podpriečinok na cestu, ktorá vracia SHGetFolderPath . Uistite sa, že používate nasledujúcej konvencie:
Spoločnosť Name\Product Name\Product verzia
Napríklad, výsledné úplnú cestu môže vyzerať napríklad takto:
\Documents and Settings\All Users\Application Data\My Company\My Product\1.0
Vyhľadajte správny priečinok Application Data, prejsť vhodné CSIDL hodnota založená na kategóriu vaše údaje z prihlášky.
  • Pre každého užívateľa (roamingu) údajov, použite hodnotu CSIDL_APPDATA . Toto predvolené nastavenie na nasledujúcej ceste:
    \Documents and Settings\užívateľské meno> \Application Data
  • Pre každého používateľa (roaming) údajov, použite hodnotu CSIDL_LOCAL_APPDATA . Toto predvolené nastavenie na nasledujúcej ceste:
    \Documents and Settings\užívateľské meno> \Local údajov
  • Pre každý počítač (non užívateľ špecifické a -roamingu) údajov, Použite hodnotu CSIDL_COMMON_APPDATA . Toto predvolené nastavenie na nasledujúcej ceste:
    \Documents and Settings\All Users\Application Data
Nasledujúci fragment kódu ukazuje ako otvoriť dočasný súbor denníka, ktorý sa nachádza 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();   }}

Pomocou databázy Registry uvážlivo

Dôležité Táto časť, metóda alebo úloha obsahuje kroky, ktoré vám povedať, ako upraviť databázu registry. Avšak, môžu spôsobiť vážne problémy ak databázu registrov upravíte nesprávne. Preto sa uistite, že ste postupovali správne. Doporučujeme zálohovať databázu registrov skôr, ako zmeníte jej hodnoty. Potom, môžete obnoviť databázu registrov, ak sa vyskytne problém. Ďalšie informácie o zálohovaní a obnovení databázy registrov nájdete po kliknutí na nasledovné číslo článku publikovaného v Microsoft Knowledge Base:
322756 Ako zálohovať a obnovenie databázy registry v systéme Windows

Môžete tiež použiť register na ukladanie malých množstva dát aplikácie. Údaje, ktoré presahuje 64 kilobajtov (KB), musíte použiť priečinok Application Data. Dodržujte nasledujúce smernice, keď používate databázy registry pre ukladanie údajov aplikácie:
  • Pre malé množstvo užívateľských dát, použite databázy registry kľúč HKEY_CURRENT_USER (HKLM).
  • Pre malé množstvo počítačových údajov, použite databázy registry kľúč HKEY_LOCAL_MACHINE (HKLM). Vaša žiadosť by písať do HKLM v čase spustenia, pretože, podľa predvoleného nastavenia používatelia iba mať prístup na čítanie k stromu HKLM .
  • V čase inštalácie aplikácie musí ukladať viac ako celkom 128 KB HKCU a HKLM.
  • Komponent objekt Model (COM) komponenty sú registrované pod kľúčom HKEY_CLASSES_ROOT (HKCR) registra. Maximálne 128 KB nezahŕňa HKCR.
  • Keď píšete HKLM alebo HKCU, musíte vytvoriť kľúče pre firmy, názov výrobku, a číslo verzie produktu, mení a dopĺňa takto:
    HKLM\Software\Company Name\Product Name\Product verzia
    HKCU\Software\Company Name\Product Name\Product verzia
  • Používať funkcie databázy registry (napr. RegCreateKeyEx a funkcia RegSetValueEx) čítať a zapisovať položky databázy registry.

Riešenie problémov

  • Pomôcť zabezpečiť, že aplikácie beží na staršie verzie Okrem systému Windows XP, Windows vždy odkaz na vykonávanie SHGetFolderPath v Shfolder.dll. Hoci systém Windows XP obsahuje SHGetFolderPath v knižnici Shell32.dll, predchádzajúce verzie systému Windows nemusí podporovať funkcie v rámci tejto DLL knižnice (DLL).
  • Shfolder.dll je Redistribuovateľný balík komponentov a môže byť distribuované s vašej žiadosti.
  • Neuchovávajte plným cesty k priečinku Dokumenty priečinok (alebo iných systémových priečinkov) do aplikácie-špecifické miesto, ako súbor zoznam naposledy použité súbory, pretože používateľ alebo správca môže premiestniť tieto priečinky medzi po sebe idúcich použitie vašej žiadosti.
Odkazy
Pre ostatné hornej zasiahnutých Visual C++ .NET Microsoft Knowledge Base články, navštívte Visual C++ .NET Support Center v nasledujúcich Microsoft Webová lokalita:
Centrum podpory programovacieho jazyka Visual C++ .NET (2002)
http://support.Microsoft.com/default.aspx?xmlid=FH%3BEN-US%3Bvcnet
Ďalšie informácie o kompletnú sadu zložiek, ktoré možno identifikovať SHGetFolderPath , pozri nasledujúci Microsoft Platform Software Rozvoj Kit (SDK) dokumentácia: Ďalšie informácie o shellu programovanie všeobecne, pozri nasledujúce webová lokalita webová lokalita Microsoft Developer Network (MSDN):

Upozornenie: Tento článok bol preložený automaticky.

Vlastnosti

ID článku: 310294 – Posledná kontrola: 07/20/2013 14:10:00 – Revízia: 3.0

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

  • kbhowtomaster kbnewsgrouplink kbmt KB310294 KbMtsk
Pripomienky