Dela via


CFile-klass

Basklassen för Microsoft Foundation-klassfilklasser.

Syntax

class CFile : public CObject

Medlemmar

Offentliga konstruktorer

Namn Beskrivning
CFile::CFile Konstruerar ett CFile objekt från en sökväg eller filreferens.

Offentliga metoder

Namn Beskrivning
CFile::Abort Stänger en fil som ignorerar alla varningar och fel.
CFile::Close Stänger en fil och tar bort objektet.
CFile::D uplicera Konstruerar ett duplicerat objekt baserat på den här filen.
CFile::Flush Rensar alla data som ännu inte har skrivits.
CFile::GetFileName Hämtar filnamnet för den valda filen.
CFile::GetFilePath Hämtar den fullständiga filsökvägen för den valda filen.
CFile::GetFileTitle Hämtar rubriken på den valda filen.
CFile::GetLength Hämtar filens längd.
CFile::GetPosition Hämtar den aktuella filpekaren.
CFile::GetStatus Hämtar status för den öppna filen, eller i den statiska versionen, hämtar statusen för den angivna filen (statisk, virtuell funktion).
CFile::LockRange Låser ett intervall med byte i en fil.
CFile::Open Öppnar en fil på ett säkert sätt med ett alternativ för feltestning.
CFile::Read Läser (obufferterade) data från en fil på den aktuella filpositionen.
CFile::Remove Tar bort den angivna filen (statisk funktion).
CFile::Rename Byter namn på den angivna filen (statisk funktion).
CFile::Seek Placerar den aktuella filpekaren.
CFile::SeekToBegin Placerar den aktuella filpekaren i början av filen.
CFile::SeekToEnd Placerar den aktuella filpekaren i slutet av filen.
CFile::SetFilePath Anger den fullständiga filsökvägen för den valda filen.
CFile::SetLength Ändrar filens längd.
CFile::SetStatus Anger status för den angivna filen (statisk, virtuell funktion).
CFile::UnlockRange Låser upp ett intervall med byte i en fil.
CFile::Write Skriver (obufferterade) data i en fil till den aktuella filpositionen.

Offentliga operatörer

Namn Beskrivning
CFile::operator HANDLE Ett handtag till ett CFile objekt.

Medlemmar i offentliga data

Namn Beskrivning
CFile::hFileNull Avgör om objektet CFile har ett giltigt handtag.
CFile::m_hFile Innehåller vanligtvis filhandtaget för operativsystemet.

Skyddade datamedlemmar

Namn Beskrivning
CFile::m_pTM Pekare till CAtlTransactionManager objekt.

Anmärkningar

Den tillhandahåller direkt obuffertade, binära diskindata-/utdatatjänster, och den stöder indirekt textfiler och minnesfiler via sina härledda klasser. CFile fungerar tillsammans med CArchive klassen för att stödja serialisering av Microsoft Foundation-klassobjekt.

Den hierarkiska relationen mellan den här klassen och dess härledda klasser gör att programmet kan fungera på alla filobjekt via det polymorfa CFile gränssnittet. En minnesfil fungerar till exempel som en diskfil.

Använd CFile och dess härledda klasser för generell disk-I/O. Använd ofstream eller andra Microsoft-klasser iostream för formaterad text som skickas till en diskfil.

Normalt öppnas en diskfil automatiskt vid CFile konstruktion och stängs vid förstörelse. Med statiska medlemsfunktioner kan du fråga en fils status utan att öppna filen.

Mer information om hur du använder CFilefinns i artiklarna Filer i MFC och Filhantering i Run-Time-biblioteksreferensen.

Arvshierarki

CObject

CFile

Kravspecifikation

rubrik: afx.h

CFile::Abort

Stänger filen som är associerad med det här objektet och gör filen otillgänglig för läsning eller skrivning.

virtual void Abort();

Anmärkningar

Om du inte har stängt filen innan du förstör objektet stänger destrukteraren den åt dig.

Vid hantering av undantag CFile::Abort skiljer sig från CFile::Close på två viktiga sätt. Abort Först utlöser funktionen inget undantag vid fel, eftersom fel ignoreras av Abort. Abort För det andra kommer inte ASSERT om filen inte har öppnats eller stängdes tidigare.

Om du använde new för att allokera CFile objektet på heapen måste du ta bort det när du har stängt filen. Abort anger m_hFile till CFile::hFileNull.

Exempel

CStdioFile fileTest;
TCHAR* pszFileName = _T("Abort_File.dat");

// do stuff that may cause exceptions
CFileException ex;
if (!fileTest.Open(pszFileName, CFile::modeWrite, &ex))
{
   ex.ReportError();
   fileTest.Abort();   // close file safely and quietly
}

CFile::CFile

Konstruerar och initierar ett CFile objekt.

CFile();
CFile(CAtlTransactionManager* pTM);
CFile(HANDLE hFile);

CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);

CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM);

Parameterar

hFile
Handtag för en fil som ska bifogas till CFile objektet.

lpszFileName
Relativ eller fullständig sökväg för en fil som ska bifogas till CFile objektet.

nOpenFlags
Bitvis kombination (OR) av filåtkomstalternativ för den angivna filen. Se avsnittet Kommentarer för möjliga alternativ.

pTM-
Pekare till CAtlTransactionManager-objekt

Anmärkningar

Följande fem tabeller visar möjliga alternativ för parametern nOpenFlags .

Välj endast något av följande alternativ för filåtkomstläge. Standardläget för filåtkomst är CFile::modeRead, som är skrivskyddat.

Värde Beskrivning
CFile::modeRead Begär skrivskyddad åtkomst.
CFile::modeWrite Begär endast skrivåtkomst.
CFile::modeReadWrite Begär läs- och skrivåtkomst.

Välj något av följande teckenlägesalternativ.

Värde Beskrivning
CFile::typeBinary Anger binärt läge (används endast i härledda klasser).
CFile::typeText Anger textläge med särskild bearbetning för returlinjematningspar för vagn (används endast i härledda klasser).
CFile::typeUnicode Anger Unicode-läge (används endast i härledda klasser). Text skrivs till filen i Unicode-format när programmet är inbyggt i en Unicode-konfiguration. Ingen strukturlista skrivs till filen.

Välj endast något av följande alternativ för filresursläge. Standardläget för filresurs är CFile::shareExclusive, vilket är exklusivt.

Värde Beskrivning
CFile::shareDenyNone Inga delningsbegränsningar.
CFile::shareDenyRead Nekar läsbehörighet till alla andra.
CFile::shareDenyWrite Nekar skrivåtkomst till alla andra.
CFile::shareExclusive Nekar läs- och skrivåtkomst till alla andra.

Välj det första eller båda av följande alternativ för att skapa filer. Standardläget för skapande är CFile::modeNoTruncate, som är öppet befintligt.

Värde Beskrivning
CFile::modeCreate Skapar en ny fil om det inte finns någon fil. Om filen redan finns skrivs den över och är ursprungligen inställd på nolllängd.
CFile::modeNoTruncate Skapar en ny fil om det inte finns någon fil. Annars, om filen redan finns, är den kopplad till objektet CFile .

Välj följande alternativ för filcachelagring enligt beskrivningen. Som standard använder systemet ett allmänt cachelagringsschema som inte är tillgängligt som ett alternativ.

Värde Beskrivning
CFile::osNoBuffer Systemet använder inte en mellanliggande cache för filen. Det här alternativet avbryter följande två alternativ.
CFile::osRandomAccess Filcachen är optimerad för slumpmässig åtkomst. Använd inte både det här alternativet och alternativet för sekventiell genomsökning.
CFile::osSequentialScan Filcachen är optimerad för sekventiell åtkomst. Använd inte både det här alternativet och alternativet för slumpmässig åtkomst.
CFile::osWriteThrough Skrivåtgärder utförs utan fördröjning.

Välj följande säkerhetsalternativ för att förhindra att filhandtaget ärvs. Som standard kan alla nya underordnade processer använda filhandtaget.

Värde Beskrivning
CFile::modeNoInherit Förhindrar att underordnade processer använder filhandtaget.

Standardkonstruktorn initierar medlemmar men bifogar inte en fil till CFile objektet. När du har använt den här konstruktorn använder du metoden CFile::Open för att öppna en fil och koppla den CFile till objektet.

Konstruktorn med en parameter initierar medlemmar och bifogar en befintlig fil till CFile objektet.

Konstruktorn med två parametrar initierar medlemmar och försöker öppna den angivna filen. Om den här konstruktorn öppnar den angivna filen kopplas filen till CFile objektet. Annars genererar konstruktorn en pekare till ett CInvalidArgException objekt. Mer information om hur du hanterar undantag finns i Undantag.

Om ett CFile objekt öppnar en angiven fil stängs filen automatiskt när CFile objektet förstörs. Annars måste du uttryckligen stänga filen när den CFile inte längre är kopplad till objektet.

Exempel

Följande kod visar hur du använder en CFile.

HANDLE hFile = CreateFile(_T("CFile_File.dat"),
   GENERIC_WRITE, FILE_SHARE_READ,
   NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

if (hFile == INVALID_HANDLE_VALUE)
{
   AfxMessageBox(_T("Couldn't create the file!"));
}
else
{
   // Attach a CFile object to the handle we have.
   CFile myFile(hFile);

   static const TCHAR sz[] = _T("I love CFile!");

   // write string
   myFile.Write(sz, sizeof(sz));

   // We need to call Close() explicitly. Note that there's no need to 
   // call CloseHandle() on the handle returned by the API because 
   // Close() automatically calls CloseHandle() for us.
   myFile.Close();

CFile::Close

Stänger filen som är associerad med det här objektet och gör filen otillgänglig för läsning eller skrivning.

virtual void Close();

Anmärkningar

Om du inte har stängt filen innan du förstör objektet stänger destrukteraren den åt dig.

Om du använde new för att allokera CFile objektet på heapen måste du ta bort det när du har stängt filen. Close anger m_hFile till CFile::hFileNull.

Exempel

Se exemplet för CFile::CFile.

CFile::D uplicera

Konstruerar ett duplicerat CFile objekt för en viss fil.

virtual CFile* Duplicate() const;

Returvärde

En pekare till ett duplicerat CFile objekt.

Anmärkningar

Den här funktionen motsvarar C-körningsfunktionen _dup.

CFile::Flush

Tvingar alla data som finns kvar i filbufferten att skrivas till filen.

virtual void Flush();

Anmärkningar

Användningen av Flush garanterar inte tömning av CArchive buffertar. Om du använder ett arkiv anropar du CArchive::Flush först.

Exempel

Se exemplet för CFile::SetFilePath.

CFile::GetFileName

Anropa den här medlemsfunktionen för att hämta namnet på en angiven fil.

virtual CString GetFileName() const;

Returvärde

Namnet på filen.

Anmärkningar

När du till exempel anropar GetFileName för att generera ett meddelande till användaren om filen returneras filnamnet c:\windows\write\myfile.wri, myfile.wri.

Om du vill returnera hela sökvägen till filen, inklusive namnet, anropar du GetFilePath. Om du vill returnera filens rubrik (myfile) anropar du GetFileTitle.

Exempel

Det här kodfragmentet öppnar SYSTEMET. INI-fil i windows-katalogen. Om det hittas skrivs namnet och sökvägen och rubriken ut i exemplet enligt utdata:

try
{
   // try to open the file
   CFile sysFile(_T("C:\\WINDOWS\\SYSTEM.INI"), CFile::modeRead);

   // print out path name and title information
   _tprintf_s(_T("Path is : \"%s\"\n"),
      (LPCTSTR) sysFile.GetFilePath());
   _tprintf_s(_T("Name is : \"%s\"\n"),
      (LPCTSTR) sysFile.GetFileName());
   _tprintf_s(_T("Title is: \"%s\"\n"), 
      (LPCTSTR) sysFile.GetFileTitle());

   // close the file handle
   sysFile.Close();
}
catch (CFileException* pEx)
{
   // if an error occurs, just make a message box
   pEx->ReportError();
   pEx->Delete();
}

CFile::GetFilePath

Anropa den här medlemsfunktionen för att hämta den fullständiga sökvägen för en angiven fil.

virtual CString GetFilePath() const;

Returvärde

Den fullständiga sökvägen till den angivna filen.

Anmärkningar

När du till exempel anropar GetFilePath för att generera ett meddelande till användaren om filen c:\windows\write\myfile.wrireturneras filsökvägen, c:\windows\write\myfile.wri.

Om du bara vill returnera namnet på filen (myfile.wri) anropar du GetFileName. Om du vill returnera filens rubrik (myfile) anropar du GetFileTitle.

Exempel

Se exemplet för GetFileName.

CFile::GetFileTitle

Anropa den här medlemsfunktionen för att hämta filrubriken (visningsnamnet) för filen.

virtual CString GetFileTitle() const;

Returvärde

Rubriken på den underliggande filen.

Anmärkningar

Den här metoden anropar GetFileTitle för att hämta filens rubrik. Om det lyckas returnerar metoden strängen som systemet skulle använda för att visa filnamnet för användaren. I annat fall anropar metoden PathFindFileName för att hämta filnamnet (inklusive filnamnstillägget) för den underliggande filen. Det innebär att filnamnstillägget inte alltid ingår i den returnerade filrubriksträngen. Mer information finns i GetFileTitle och PathFindFileName i Windows SDK.

Om du vill returnera hela sökvägen till filen, inklusive namnet, anropar du GetFilePath. Om du bara vill returnera namnet på filen anropar du GetFileName.

Exempel

Se exemplet för GetFileName.

CFile::GetLength

Hämtar filens aktuella logiska längd i byte.

virtual ULONGLONG GetLength() const;

Returvärde

Filens längd.

Exempel

CFile* pFile = NULL;
// Constructing a CFile object with this override may throw
// a CFile exception, and won't throw any other exceptions.
// Calling CString::Format() may throw a CMemoryException,
// so we have a catch block for such exceptions, too. Any
// other exception types this function throws will be
// routed to the calling function.
try
{
   pFile = new CFile(_T("C:\\WINDOWS\\SYSTEM.INI"),
      CFile::modeRead | CFile::shareDenyNone);
   ULONGLONG dwLength = pFile->GetLength();
   CString str;
   str.Format(_T("Your SYSTEM.INI file is %I64u bytes long."), dwLength);
   AfxMessageBox(str);
}
catch (CFileException* pEx)
{
   // Simply show an error message to the user.
   pEx->ReportError();
   pEx->Delete();
}
catch(CMemoryException* pEx)
{
   pEx->ReportError();
   pEx->Delete();
   // We can't recover from this memory exception, so we'll
   // just terminate the app without any cleanup. Normally,
   // an application should do everything it possibly can to
   // clean up properly and _not_ call AfxAbort().
   AfxAbort();
}

// If an exception occurs in the CFile constructor,
// the language will free the memory allocated by new
// and will not complete the assignment to pFile.
// Thus, our clean-up code needs to test for NULL.
if (pFile != NULL)
{
   pFile->Close();
   delete pFile;
}         

CFile::GetPosition

Hämtar det aktuella värdet för filpekaren, som kan användas i senare anrop till Seek.

virtual ULONGLONG GetPosition() const;

Returvärde

Filpekaren.

Exempel

CFile cfile;
cfile.Open(_T("Seek_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
LONGLONG lOffset = 1000;
ULONGLONG lActual;
lActual = cfile.Seek(lOffset, CFile::begin);
ASSERT(cfile.GetPosition() == lActual);

CFile::GetStatus

Den här metoden hämtar statusinformation som är relaterad till en viss CFile objektinstans eller en viss filsökväg.

BOOL GetStatus(CFileStatus& rStatus) const;

static BOOL PASCAL GetStatus(
    LPCTSTR lpszFileName,
    CFileStatus& rStatus,
    CAtlTransactionManager* pTM = NULL);

Parameterar

rStatus
En referens till en användarspecifik CFileStatus struktur som tar emot statusinformationen. Strukturen CFileStatus har följande fält:

  • CTime m_ctime Datum och tid då filen skapades.

  • CTime m_mtime Datum och tid då filen senast ändrades.

  • CTime m_atime Datum och tid då filen senast användes för läsning.

  • ULONGLONG m_size Den logiska storleken på filen i byte, enligt dir-kommandot.

  • BYTE m_attribute Filens attributbyte.

  • char m_szFullName[_MAX_PATH] Det absoluta filnamnet i Windows-teckenuppsättningen.

lpszFileName
En sträng i Windows-teckenuppsättningen som är sökvägen till önskad fil. Sökvägen kan vara relativ eller absolut eller innehålla ett nätverkssökvägsnamn.

pTM-
Pekare till CAtlTransactionManager-objekt

Returvärde

TRUE om statusinformationen för den angivna filen har hämtats. annars FALSKT.

Anmärkningar

Den icke-statiska versionen av GetStatus hämtar statusinformation för den öppna fil som är associerad med det angivna CFile objektet. Den statiska versionen av GetStatus hämtar filstatusen från en viss filsökväg utan att faktiskt öppna filen. Den här versionen är användbar för att testa förekomsten och åtkomsträttigheterna för en fil.

Medlemmen m_attribute i CFileStatus strukturen refererar till filattributuppsättningen. Klassen CFile tillhandahåller attributuppräkningstypen så att filattribut kan anges symboliskt:

enum Attribute {
    normal =    0x00,
    readOnly =  0x01,
    hidden =    0x02,
    system =    0x04,
    volume =    0x08,
    directory = 0x10,
    archive =   0x20
    };

Exempel

CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);
CFileStatus status;
if(cfile.GetStatus(status))    // virtual member function
{
   TRACE(_T("File size = %u\n"), status.m_size);
}
TCHAR* pszFileName = _T("SetLength_File.dat");
if(CFile::GetStatus(pszFileName, status))   // static function
{
   TRACE(_T("Full file name = %s\n"), status.m_szFullName);
}

CFile::hFileNull

Avgör förekomsten av ett giltigt filhandtag för CFile objektet.

static AFX_DATA const HANDLE hFileNull;

Anmärkningar

Den här konstanten CFile används för att avgöra om objektet har ett giltigt filhandtag.

I följande exempel visas den här åtgärden:

if (myFile.m_hFile != CFile::hFileNull)
   ;//perform operations on the file
else
   ;//indicate the presence of an invalid handle         

CFile::LockRange

Låser ett intervall med byte i en öppen fil, vilket utlöser ett undantag om filen redan är låst.

virtual void LockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Parameterar

dwPos
Byteförskjutningen för början av byteintervallet som ska låsas.

dwCount
Antalet byte i intervallet som ska låsas.

Anmärkningar

Om byte låses i en fil förhindras åtkomst till dessa byte av andra processer. Du kan låsa fler än en region i en fil, men inga överlappande regioner tillåts.

När du låser upp regionen med medlemsfunktionen UnlockRange måste byteintervallet motsvara exakt den region som tidigare var låst. Funktionen LockRange sammanfogar inte intilliggande regioner. Om två låsta regioner ligger intill varandra måste du låsa upp varje region separat.

Anmärkning

Den här funktionen är inte tillgänglig för CMemFileklassen -derived.

Exempel

CFile cfile;
cfile.Open(_T("LockRange_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
ULONGLONG dwPos = 10;
ULONGLONG dwCount = 100;
cfile.LockRange(dwPos, dwCount);

// do something with the file

cfile.UnlockRange(dwPos, dwCount);

CFile::m_hFile

Innehåller operativsystemets filhandtag för en öppen fil.

HANDLE m_hFile;

Anmärkningar

m_hFile är en offentlig variabel av typen UINT. Den innehåller CFile::hFileNull, en operativsystemoberoende tom filindikator, om handtaget inte har tilldelats.

Användning av m_hFile rekommenderas inte eftersom medlemmens betydelse beror på den härledda klassen. m_hFile är en offentlig medlem för enkelhetens skull för att stödja icke-polymorf användning av klassen.

CFile::m_pTM

Pekare till ett CAtlTransactionManager objekt.

CAtlTransactionManager* m_pTM;

Anmärkningar

CFile::Open

Överbelastad. Open är utformad för användning med standardkonstruktorn CFile .

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CFileException* pError = NULL);

virtual BOOL Open(
    LPCTSTR lpszFileName,
    UINT nOpenFlags,
    CAtlTransactionManager* pTM,
    CFileException* pError = NULL);

Parameterar

lpszFileName
En sträng som innehåller sökvägen till önskad fil. Sökvägen kan vara relativ, absolut eller ett nätverksnamn (UNC).

nOpenFlags
En UINT som definierar filens delnings- och åtkomstläge. Den anger vilken åtgärd som ska vidtas när filen öppnas. Du kan kombinera alternativ med hjälp av operatorn bitwise-OR ( | ). Det krävs en åtkomstbehörighet och ett resursalternativ. lägena modeCreate och modeNoInherit är valfria. En lista över lägesalternativ finns i CFile-konstruktorn.

pError
En pekare till ett befintligt filfelsobjekt som får statusen för en misslyckad åtgärd.

pTM-
Pekare till CAtlTransactionManager-objekt

Returvärde

Nonzero om öppningen lyckades; annars 0. Parametern pError är bara meningsfull om 0 returneras.

Anmärkningar

De två Open funktionerna är "säkra" metoder för att öppna en fil, där ett fel är ett normalt, förväntat villkor.

CFile Konstruktorn genererar ett undantag i ett feltillstånd, Open men returnerar FALSE för felvillkor. Open kan dock fortfarande initiera ett CFileException-objekt för att beskriva felet. Om du inte anger pError-parametern , eller om du skickar NULL för pError, Open returnerar FALSE och inte genererar en CFileException. Om du skickar en pekare till en befintlig CFileExceptionoch Open stöter på ett fel fyller funktionen den med information som beskriver felet. Open utlöser inget undantag i något av fallen.

I följande tabell beskrivs möjliga resultat av Open.

pError Fel påträffades Returvärde CFileException-innehåll
NOLL Nej SANN Inte tillämpligt
ptr till CFileException Nej SANN oförändrad
NOLL Ja Falskt Inte tillämpligt
ptr till CFileException Ja Falskt initierats för att beskriva fel

Exempel

CFile f;
CFileException e;
TCHAR* pszFileName = _T("Open_File.dat");
if(!f.Open(pszFileName, CFile::modeCreate | CFile::modeWrite, &e))
{
   TRACE(_T("File could not be opened %d\n"), e.m_cause);
}

 

//A second example for CFile::Open.
//This function uses CFile to copy binary files.
bool BinaryFileCopy(LPCTSTR pszSource, LPCTSTR pszDest)
{
   // constructing these file objects doesn't open them
   CFile sourceFile;
   CFile destFile;

   // we'll use a CFileException object to get error information
   CFileException ex;

   // open the source file for reading
   if (!sourceFile.Open(pszSource,
      CFile::modeRead | CFile::shareDenyWrite, &ex))
   {
      // complain if an error happened
      // no need to delete the ex object

      TCHAR szError[1024];
      ex.GetErrorMessage(szError, 1024);
      _tprintf_s(_T("Couldn't open source file: %1024s"), szError);
      return false;
   }
   else
   {
      if (!destFile.Open(pszDest, CFile::modeWrite |
         CFile::shareExclusive | CFile::modeCreate, &ex))
      {
         TCHAR szError[1024];
         ex.GetErrorMessage(szError, 1024);
         _tprintf_s(_T("Couldn't open source file: %1024s"), szError);

         sourceFile.Close();
         return false;
      }

      BYTE buffer[4096];
      DWORD dwRead;

      // Read in 4096-byte blocks,
      // remember how many bytes were actually read,
      // and try to write that many out. This loop ends
      // when there are no more bytes to read.
      do
      {
         dwRead = sourceFile.Read(buffer, 4096);
         destFile.Write(buffer, dwRead);
      }
      while (dwRead > 0);

      // Close both files

      destFile.Close();
      sourceFile.Close();
   }

   return true;
}

CFile::operator HANDLE

Använd den här operatorn för att skicka ett handtag till ett CFile objekt till funktioner som ReadFileEx och GetFileTime som förväntar sig en HANDLE.

operator HANDLE() const;

CFile::Read

Läser in data i en buffert från filen som är associerad med CFile objektet.

virtual UINT Read(
    void* lpBuf,
    UINT nCount);

Parameterar

lpBuf
Pekare till den buffert som användaren har angett som ska ta emot data som lästs från filen.

nCount
Det maximala antalet byte som ska läsas från filen. För textlägesfiler räknas vagnreturradsmatningspar som enkla tecken.

Returvärde

Antalet byte som överförs till bufferten. För alla CFile klasser kan returvärdet vara mindre än nCount om filslutet har nåtts.

Exempel

CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate | 
   CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);         
cfile.Flush();
cfile.SeekToBegin();
char pbufRead[100];
cfile.Read(pbufRead, sizeof(pbufRead));
ASSERT(0 == memcmp(pbufWrite, pbufRead, sizeof(pbufWrite)));

Ett annat exempel finns i CFile::Open.

CFile::Remove

Den här statiska funktionen tar bort filen som anges av sökvägen.

static void PASCAL Remove(
    LPCTSTR lpszFileName,
    CAtlTransactionManager* pTM = NULL);

Parameterar

lpszFileName
En sträng som är sökvägen till önskad fil. Sökvägen kan vara relativ eller absolut och kan innehålla ett nätverksnamn.

pTM-
Pekare till CAtlTransactionManager-objekt

Anmärkningar

Remove tar inte bort en katalog.

Medlemsfunktionen Remove utlöser ett undantag om den anslutna filen är öppen eller om filen inte kan tas bort. Den här funktionen motsvarar DEL-kommandot.

Exempel

//example for CFile::Remove
TCHAR* pFileName = _T("Remove_File.dat");
try
{
   CFile::Remove(pFileName);
}
catch (CFileException* pEx)
{
   TRACE(_T("File %20s cannot be removed\n"), pFileName);
   pEx->Delete();
}

CFile::Rename

Den här statiska funktionen byter namn på den angivna filen.

static void PASCAL Rename(
    LPCTSTR lpszOldName,
    LPCTSTR lpszNewName,
    CAtlTransactionManager* pTM = NULL);

Parameterar

lpszOldName
Den gamla vägen.

lpszNewName
Den nya sökvägen.

pTM-
Pekare till CAtlTransactionManager-objekt

Anmärkningar

Kataloger kan inte byta namn. Den här funktionen motsvarar REN-kommandot.

Exempel

TCHAR* pOldName = _T("Oldname_File.dat");
TCHAR* pNewName = _T("Renamed_File.dat");

try
{
    CFile::Rename(pOldName, pNewName);
}
catch(CFileException* pEx )
{
    TRACE(_T("File %20s not found, cause = %d\n"), pOldName, 
       pEx->m_cause);
    pEx->Delete();
}

CFile::Seek

Flyttar filpekaren i en öppen fil.

virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);

Parameterar

lOff
Antal byte för att flytta filpekaren. Positiva värden flyttar filpekaren mot slutet av filen. negativa värden flyttar filpekaren mot början av filen.

nFrån
Position att söka efter. Se avsnittet Kommentarer för möjliga värden.

Returvärde

Filpekarens position om metoden lyckades. Annars är returvärdet odefinierat och en pekare till ett CFileException undantag genereras.

Anmärkningar

I följande tabell visas möjliga värden för parametern nFrom .

Värde Beskrivning
CFile::begin Sök från början av filen.
CFile::current Sök från den aktuella platsen för filpekaren.
CFile::end Sök från slutet av filen.

När en fil öppnas placeras filpekaren vid 0, början av filen.

Du kan ange filpekaren till en position utanför slutet av en fil. Om du gör det ökar inte storleken på filen förrän du skriver till filen.

Undantagshanteraren för den här metoden måste ta bort undantagsobjektet när undantaget har bearbetats.

Exempel

CFile cfile;
cfile.Open(_T("Seek_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
LONGLONG lOffset = 1000;
ULONGLONG lActual;
lActual = cfile.Seek(lOffset, CFile::begin);

CFile::SeekToBegin

Anger filpekarens värde till början av filen.

void SeekToBegin();

Anmärkningar

SeekToBegin() motsvarar Seek( 0L, CFile::begin ).

Exempel

CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();

CFile::SeekToEnd

Anger filpekarens värde till den logiska änden av filen.

ULONGLONG SeekToEnd();

Returvärde

Längden på filen i byte.

Anmärkningar

SeekToEnd() motsvarar CFile::Seek( 0L, CFile::end ).

Exempel

CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();

CFile::SetFilePath

Anropa den här funktionen för att ange sökvägen till filen. Om sökvägen till en fil till exempel inte är tillgänglig när ett CFile-objekt skapas anropar du SetFilePath för att ange det.

virtual void SetFilePath(LPCTSTR lpszNewName);

Parameterar

lpszNewName
Pekare till en sträng som anger den nya sökvägen.

Anmärkningar

Anmärkning

SetFilePath öppnar inte filen eller skapar filen. det associerar CFile bara objektet med ett sökvägsnamn, som sedan kan användas.

Exempel

TCHAR* pstrName = _T("C:\\test\\SetPath_File.dat");

// open a file
HANDLE hFile = ::CreateFile(pstrName, GENERIC_WRITE, FILE_SHARE_READ,
   NULL, CREATE_ALWAYS, 0, NULL);

if (hFile != INVALID_HANDLE_VALUE)
{
   // attach a CFile object to it
   CFile myFile(hFile);

   // At this point, myFile doesn't know the path name for the file
   // it owns because Windows doesn't associate that information
   // with the handle. Any CFileExceptions thrown by this object
   // won't have complete information.

   // Calling SetFilePath() remedies that problem by letting CFile
   // know the name of the file that's associated with the object.

   myFile.SetFilePath(pstrName);

   // write something to the file and flush it immediately
   DWORD dwValue = 1234;
   myFile.Write(&dwValue, sizeof(dwValue));
   myFile.Flush();

   // destroying the CObject here will call ::CloseHandle() on the file
} 

CFile::SetLength

Anropa den här funktionen för att ändra filens längd.

virtual void SetLength(ULONGLONG dwNewLen);

Parameterar

dwNewLen
Önskad längd på filen i byte. Det här värdet kan vara större eller mindre än filens aktuella längd. Filen utökas eller trunkeras efter behov.

Anmärkningar

Anmärkning

Med CMemFilekan den här funktionen utlösa ett CMemoryException objekt.

Exempel

CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);

CFile::SetStatus

Anger status för filen som är associerad med den här filplatsen.

static void PASCAL SetStatus(
    LPCTSTR lpszFileName,
    const CFileStatus& status,
    CAtlTransactionManager* pTM = NULL);

Parameterar

lpszFileName
En sträng som är sökvägen till önskad fil. Sökvägen kan vara relativ eller absolut och kan innehålla ett nätverksnamn.

status
Bufferten som innehåller den nya statusinformationen. GetStatus Anropa medlemsfunktionen för att fylla i CFileStatus strukturen med aktuella värden och gör sedan ändringar efter behov. Om ett värde är 0 uppdateras inte motsvarande statusobjekt. Se funktionen GetStatus-medlem för en beskrivning av CFileStatus strukturen.

pTM-
Pekare till CAtlTransactionManager-objekt

Anmärkningar

Om du vill ange tid ändrar du m_mtimestatusfältet.

När du gör ett anrop till SetStatus i ett försök att ändra endast attributen för filen och m_mtime medlemmen i filstatusstrukturen inte ärzero, kan attributen också påverkas (om du ändrar tidsstämpeln kan det ha biverkningar på attributen). Om du bara vill ändra attributen för filen anger m_mtime du först medlemmen i filstatusstrukturen till noll och gör sedan ett anrop till SetStatus.

Exempel

TCHAR* pFileName = _T("ReadOnly_File.dat");
CFileStatus status;
CFile::GetStatus(pFileName, status);
status.m_attribute |= CFile::readOnly;
CFile::SetStatus(pFileName, status);         

CFile::UnlockRange

Låser upp ett intervall med byte i en öppen fil.

virtual void UnlockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Parameterar

dwPos
Byte-förskjutningen av början av byteintervallet som ska låsas upp.

dwCount
Antalet byte i intervallet som ska låsas upp.

Anmärkningar

Mer information finns i beskrivningen av funktionen LockRange-medlem .

Anmärkning

Den här funktionen är inte tillgänglig för - CMemFilederived-klassen.

Exempel

CFile cfile;
cfile.Open(_T("LockRange_File.dat"), CFile::modeCreate |
   CFile::modeReadWrite);
ULONGLONG dwPos = 10;
ULONGLONG dwCount = 100;
cfile.LockRange(dwPos, dwCount);

// do something with the file

cfile.UnlockRange(dwPos, dwCount);

CFile::Write

Skriver data från en buffert till filen som är associerad med CFile objektet.

virtual void Write(
    const void* lpBuf,
    UINT nCount);

Parameterar

lpBuf
En pekare till bufferten som tillhandahålls av användaren och som innehåller de data som ska skrivas till filen.

nCount
Antalet byte som ska överföras från bufferten. För textlägesfiler räknas vagnreturradsmatningspar som enkla tecken.

Anmärkningar

Write genererar ett undantag som svar på flera villkor, inklusive diskens fullständiga villkor.

Exempel

CFile cfile;
cfile.Open(_T("Write_File.dat"), CFile::modeCreate | 
   CFile::modeReadWrite);
char pbufWrite[100];
memset(pbufWrite, 'a', sizeof(pbufWrite));
cfile.Write(pbufWrite, 100);         
cfile.Flush();

Se även exemplen för CFile::CFile och CFile::Open.

Se även

MFC-exempel DRAWCLI
CObject-klass
hierarkidiagram
CStdioFile-klass
CMemFile-klass