Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Kodexemplet i det här avsnittet visar hur du öppnar och stänger filer, läser och skriver till filer och låser och låser upp filer.
I exemplet lägger programmet till en fil i slutet av en annan fil. Först öppnar programmet filen som läggs till med behörigheter som endast tillåter att programmet skriver till den. Men under tilläggsprocessen kan andra processer öppna filen med skrivskyddad behörighet, vilket ger en ögonblicksbildsvy över filen som läggs till. Sedan låses filen under själva tilläggsprocessen för att säkerställa integriteten för de data som skrivs till filen.
Det här exemplet använder inte transaktioner. Om du använder transaktionsåtgärder skulle du bara kunna ha endast läsåtkomst. I det här fallet skulle du bara se de tillagda data när transaktionsbekräftelsen har slutförts.
Exemplet visar också att programmet öppnar två filer med hjälp av CreateFile:
- One.txt öppnas för läsning.
 - Two.txt öppnas för skrivning och delad läsning.
 
Sedan använder programmet ReadFile och WriteFile för att lägga till innehållet i One.txt i slutet av Two.txt genom att läsa och skriva blocken på 4 KB. Innan du skriver till den andra filen använder programmet dock SetFilePointer för att ange pekaren för den andra filen i slutet av filen och använder LockFile för att låsa området som ska skrivas. Detta förhindrar att en annan tråd eller process med ett duplicerat handtag kommer åt området medan skrivåtgärden pågår. När varje skrivåtgärd är klar används UnlockFile för att låsa upp det låsta området.
#include <windows.h>
#include <stdio.h>
void main()
{
  HANDLE hFile;
  HANDLE hAppend;
  DWORD  dwBytesRead, dwBytesWritten, dwPos;
  BYTE   buff[4096];
  // Open the existing file.
  hFile = CreateFile(TEXT("one.txt"), // open One.txt
            GENERIC_READ,             // open for reading
            0,                        // do not share
            NULL,                     // no security
            OPEN_EXISTING,            // existing file only
            FILE_ATTRIBUTE_NORMAL,    // normal file
            NULL);                    // no attr. template
  if (hFile == INVALID_HANDLE_VALUE)
  {
     printf("Could not open one.txt."); 
     return;
  }
  // Open the existing file, or if the file does not exist,
  // create a new file.
  hAppend = CreateFile(TEXT("two.txt"), // open Two.txt
              FILE_APPEND_DATA | FILE_GENERIC_READ,    // open for appending and locking
              FILE_SHARE_READ,                         // allow multiple readers
              NULL,                                    // no security
              OPEN_ALWAYS,                             // open or create
              FILE_ATTRIBUTE_NORMAL,                   // normal file
              NULL);                                   // no attr. template
  if (hAppend == INVALID_HANDLE_VALUE)
  {
     printf("Could not open two.txt."); 
     return;
  }
  // Append the first file to the end of the second file.
  // Lock the second file to prevent another process from
  // accessing it while writing to it. Unlock the
  // file when writing is complete.
  while (ReadFile(hFile, buff, sizeof(buff), &dwBytesRead, NULL)
      && dwBytesRead > 0)
    {
    dwPos = SetFilePointer(hAppend, 0, NULL, FILE_END);
    if (!LockFile(hAppend, dwPos, 0, dwBytesRead, 0))
    {
       printf("Could not lock two.txt");
    }
    WriteFile(hAppend, buff, dwBytesRead, &dwBytesWritten, NULL);
    UnlockFile(hAppend, dwPos, 0, dwBytesRead, 0);
    }
  // Close both files.
  CloseHandle(hFile);
  CloseHandle(hAppend);
}