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.
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
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_ctimeDatum och tid då filen skapades.CTime m_mtimeDatum och tid då filen senast ändrades.CTime m_atimeDatum och tid då filen senast användes för läsning.ULONGLONG m_sizeDen logiska storleken på filen i byte, enligt dir-kommandot.BYTE m_attributeFilens 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