Megosztás:


CFile osztály

A Microsoft Foundation-osztály fájlosztályainak alaposztálya.

Szemantika

class CFile : public CObject

Tagok

Nyilvános konstruktorok

Név Leírás
CFile::CFile Objektumot CFile hoz létre egy elérési útból vagy fájlleíróból.

Nyilvános metódusok

Név Leírás
CFile::Megszakítás Bezár egy fájlt, amely figyelmen kívül hagyja az összes figyelmeztetést és hibát.
CFile::Close Bezár egy fájlt, és törli az objektumot.
CFile::D uplicate A fájl alapján duplikált objektumot hoz létre.
CFile::Flush A még megírandó adatok kiürítése.
CFile::GetFileName Lekéri a kijelölt fájl fájlnevét.
CFile::GetFilePath Lekéri a kijelölt fájl teljes elérési útját.
CFile::GetFileTitle Lekéri a kijelölt fájl címét.
CFile::GetLength Lekéri a fájl hosszát.
CFile::GetPosition Lekéri az aktuális fájlmutatót.
CFile::GetStatus Lekéri a megnyitott fájl állapotát, vagy a statikus verzióban lekéri a megadott fájl állapotát (statikus, virtuális függvény).
CFile::LockRange Bájttartomány zárolása egy fájlban.
CFile::Open Biztonságosan megnyílik egy hibatesztelési lehetőséggel rendelkező fájl.
CFile::Read Beolvassa a (nem felügyelt) adatokat egy fájlból az aktuális fájlhelyzetben.
CFile::Remove Törli a megadott fájlt (statikus függvény).
CFile::Átnevezés Átnevezi a megadott fájlt (statikus függvény).
CFile::Seek Az aktuális fájlmutató elhelyezése.
CFile::SeekToBegin Az aktuális fájlmutatót a fájl elején helyezi el.
CFile::SeekToEnd Az aktuális fájlmutatót a fájl végén helyezi el.
CFile::SetFilePath A kijelölt fájl teljes elérési útját állítja be.
CFile::SetLength Módosítja a fájl hosszát.
CFile::SetStatus Beállítja a megadott fájl állapotát (statikus, virtuális függvény).
CFile::UnlockRange Egy fájl bájttartományának feloldása.
CFile::Write A fájlban lévő (nem felügyelt) adatokat az aktuális fájlhelyzetbe írja.

Nyilvános operátorok

Név Leírás
CFile::operator HANDLE Egy objektum fogópontja CFile .

Nyilvános adatok tagjai

Név Leírás
CFile::hFileNull Meghatározza, hogy az CFile objektum rendelkezik-e érvényes leíróval.
CFile::m_hFile Általában az operációsrendszer-fájlkezelőt tartalmazza.

Védett adattagok

Név Leírás
CFile::m_pTM Mutasson az objektumra CAtlTransactionManager .

Megjegyzések

Közvetlenül biztosít nem felügyelt bináris lemezbemeneti/kimeneti szolgáltatásokat, és közvetetten támogatja a szöveges fájlokat és a memóriafájlokat a származtatott osztályokon keresztül. CFile együtt működik az osztálysal a CArchive Microsoft Foundation-osztályobjektumok szerializálásának támogatásához.

Az osztály és a származtatott osztályok közötti hierarchikus kapcsolat lehetővé teszi, hogy a program az összes fájlobjektumon a polimorf interfészen CFile keresztül működjön. A memóriafájlok például lemezfájlként viselkednek.

Általános célú lemez I/O-hoz való használata CFile és származtatott osztályai. Lemezfájlba küldött formázott szöveg használata ofstream vagy más Microsoft-osztályok iostream .

Általában a lemezfájlokat a rendszer automatikusan nyitja meg az építéskor CFile , és megsemmisítéskor bezárja. A statikus tagfüggvények lehetővé teszik egy fájl állapotának lekérdezését a fájl megnyitása nélkül.

További információ a használatról CFile: Fájlok az MFC-ben és a fájlkezelés a Run-Time könyvtár referenciájában.

Öröklési hierarchia

CObject

CFile

Követelmények

Fejléc: afx.h

CFile::Megszakítás

Bezárja az objektumhoz társított fájlt, és nem teszi elérhetetlenné a fájlt olvasáshoz vagy íráshoz.

virtual void Abort();

Megjegyzések

Ha még nem zárta be a fájlt, mielőtt megsemmisítené az objektumot, a destruktor bezárja önnek.

A kivételek CFile::Abort kezelése két fontos módon tér el egymástól CFile::Close . Először is, a Abort függvény nem fog kivételt kivenni a hibákból, mert a rendszer figyelmen kívül hagyja a Aborthibákat. Másodszor, nem Abort ha a fájlt nem nyitották meg, vagy korábban bezárták.

Ha az objektumot a new halomra osztottaCFile, akkor a fájl bezárása után törölnie kell. Abortelemet a érték m_hFileCFile::hFileNull

példa

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

Létrehoz és inicializál egy CFile objektumot.

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

CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);

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

Paraméterek

hFile
Az objektumhoz CFile csatolandó fájl kezelése.

lpszFileName
Az objektumhoz csatolandó CFile fájl relatív vagy teljes elérési útja.

nOpenFlags
A megadott fájl fájlhozzáférési beállításainak bitenkénti kombinációja (OR). A lehetséges lehetőségekért tekintse meg a Megjegyzések szakaszt.

pTM-
Mutató a CAtlTransactionManager objektumra

Megjegyzések

Az alábbi öt táblázat felsorolja az nOpenFlags paraméter lehetséges beállításait.

Az alábbi fájlhozzáférési mód beállításai közül csak egyet válasszon. Az alapértelmezett fájlelérési mód az CFile::modeReadírásvédett mód.

Érték Leírás
CFile::modeRead Csak olvasási hozzáférést kér.
CFile::modeWrite Csak írási hozzáférést kér.
CFile::modeReadWrite Olvasási és írási hozzáférést kér.

Válasszon az alábbi karaktermód-beállítások közül.

Érték Leírás
CFile::typeBinary Bináris módot állít be (csak származtatott osztályokban használatos).
CFile::typeText Speciális feldolgozással állítja be a szöveges módot a kocsivisszasoros hírcsatornapárokhoz (csak származtatott osztályokban használatos).
CFile::typeUnicode Unicode mód beállítása (csak származtatott osztályokban használatos). A szöveg Unicode formátumban íródik a fájlba, amikor az alkalmazás Unicode-konfigurációban van létrehozva. A fájlba nincs beírva anyagjegyzék.

Az alábbi fájlmegosztási mód beállításai közül csak egyet válasszon. Az alapértelmezett fájlmegosztási mód a CFile::shareExclusivekizárólagos.

Érték Leírás
CFile::shareDenyNone Nincs megosztási korlátozás.
CFile::shareDenyRead Letiltja az olvasási hozzáférést az összes többi felhasználóhoz.
CFile::shareDenyWrite Tagadja, hogy írási hozzáférést biztosít az összes többihez.
CFile::shareExclusive Az összes többi felhasználó olvasási és írási hozzáférését tagadja.

Válassza ki az alábbi fájllétrehozási mód első vagy mindkét beállítását. Az alapértelmezett létrehozási mód az CFile::modeNoTruncate, amely meg van nyitva.

Érték Leírás
CFile::modeCreate Új fájlt hoz létre, ha nincs fájl. Ha a fájl már létezik, felülírja, és kezdetben nulla hosszúságúra van állítva.
CFile::modeNoTruncate Új fájlt hoz létre, ha nincs fájl; ellenkező esetben, ha a fájl már létezik, az objektumhoz CFile van csatolva.

A leírtak szerint válassza a következő fájl gyorsítótárazási beállításait. A rendszer alapértelmezés szerint olyan általános célú gyorsítótárazási sémát használ, amely nem érhető el lehetőségként.

Érték Leírás
CFile::osNoBuffer A rendszer nem használ köztes gyorsítótárat a fájlhoz. Ez a beállítás megszakítja a következő 2 beállítást.
CFile::osRandomAccess A fájlgyorsítótár véletlenszerű hozzáférésre van optimalizálva. Ne használja ezt a lehetőséget és a szekvenciális beolvasási lehetőséget sem.
CFile::osSequentialScan A fájlgyorsítótár szekvenciális hozzáférésre van optimalizálva. Ne használja ezt a lehetőséget és a véletlenszerű hozzáférési lehetőséget sem.
CFile::osWriteThrough Az írási műveletek késedelem nélkül befejeződnek.

A következő biztonsági beállítással megakadályozhatja a fájlleíró öröklését. Alapértelmezés szerint minden új gyermekfolyamat használhatja a fájlkezelőt.

Érték Leírás
CFile::modeNoInherit Megakadályozza, hogy a gyermekfolyamatok a fájlleírót használják.

Az alapértelmezett konstruktor inicializálja a tagokat, de nem csatol fájlokat az CFile objektumhoz. A konstruktor használata után a CFile::Open metódussal nyisson meg egy fájlt, és csatolja az CFile objektumhoz.

Az egy paraméterrel rendelkező konstruktor inicializálja a tagokat, és egy meglévő fájlt csatol az CFile objektumhoz.

A két paraméterrel rendelkező konstruktor inicializálja a tagokat, és megpróbálja megnyitni a megadott fájlt. Ha ez a konstruktor sikeresen megnyitja a megadott fájlt, a fájl az objektumhoz CFile lesz csatolva, ellenkező esetben ez a konstruktor egy objektumra CInvalidArgException mutató mutatót ad. A kivételek kezeléséről további információt a Kivételek című témakörben talál.

Ha egy CFile objektum sikeresen megnyitja a megadott fájlt, az automatikusan bezárja ezt a fájlt, amikor az CFile objektum megsemmisül. Ellenkező esetben explicit módon be kell zárnia a fájlt, miután az már nem kapcsolódik az CFile objektumhoz.

példa

Az alábbi kód bemutatja, hogyan használható egy 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

Bezárja az objektumhoz társított fájlt, és nem teszi elérhetetlenné a fájlt olvasáshoz vagy íráshoz.

virtual void Close();

Megjegyzések

Ha még nem zárta be a fájlt, mielőtt megsemmisítené az objektumot, a destruktor bezárja önnek.

Ha az objektumot a new halomra osztottaCFile, akkor a fájl bezárása után törölnie kell. Closeelemet a érték m_hFileCFile::hFileNull

példa

Lásd a CFile::CFile példát.

CFile::D uplicate

Duplikált CFile objektumot hoz létre egy adott fájlhoz.

virtual CFile* Duplicate() const;

Visszaadott érték

Egy ismétlődő CFile objektumra mutató mutató.

Megjegyzések

Ez a függvény egyenértékű a C futásidejű függvényével _dup.

CFile::Flush

Kényszeríti, hogy a fájlpufferben lévő összes adat a fájlba legyen írva.

virtual void Flush();

Megjegyzések

A használata Flush nem garantálja a pufferek kiürítését CArchive . Ha archívumot használ, hívja meg először a CArchive::Flush parancsot.

példa

Lásd a CFile::SetFilePath példát.

CFile::GetFileName

Hívja meg ezt a tagfüggvényt egy megadott fájl nevének lekéréséhez.

virtual CString GetFileName() const;

Visszaadott érték

A fájl neve.

Megjegyzések

Ha például arra hív fel GetFileName , hogy küldjön üzenetet a felhasználónak a fájlról c:\windows\write\myfile.wri, a fájlnév myfile.wrilesz visszaadva.

Ha a fájl teljes elérési útját szeretné visszaadni, beleértve a nevet, hívja meg a GetFilePathot. A fájl címének visszaadásáhozmyfile hívja meg a GetFileTitle parancsot.

példa

Ez a kódrészlet megnyitja a SYSTEM-t. INI-fájl a WINDOWS könyvtárban. Ha megtalálta, a példa kinyomtatja a nevet és az elérési utat és a címet a Kimenet területen látható módon:

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

Hívja meg ezt a tagfüggvényt egy megadott fájl teljes elérési útjának lekéréséhez.

virtual CString GetFilePath() const;

Visszaadott érték

A megadott fájl teljes elérési útja.

Megjegyzések

Ha például a felhasználónak a fájl GetFilePathelérési útjáról szóló üzenet létrehozására hívja c:\windows\write\myfile.wri meg a hívást, c:\windows\write\myfile.wria rendszer visszaadja a fájlt.

Ha csak a fájl (myfile.wri) nevét szeretné visszaadni, hívja meg a GetFileName parancsot. A fájl címének visszaadásáhozmyfile hívja meg a GetFileTitle parancsot.

példa

Lásd a GetFileName példát.

CFile::GetFileTitle

Hívja meg ezt a tagfüggvényt a fájl címének (a megjelenítendő névnek) lekéréséhez.

virtual CString GetFileTitle() const;

Visszaadott érték

A mögöttes fájl címe.

Megjegyzések

Ez a metódus meghívja a GetFileTitle-t a fájl címének lekérésére. Ha sikeres, a metódus visszaadja azt a sztringet, amellyel a rendszer megjelenítené a fájlnevet a felhasználónak. Ellenkező esetben a metódus meghívja a PathFindFileName parancsot a mögöttes fájl fájlnevének (beleértve a fájlkiterjesztést) lekéréséhez. Ez azt jelenti, hogy a fájlkiterjesztés nem mindig szerepel a visszaadott fájlcímsztringben. További információ: GetFileTitle és PathFindFileName a Windows SDK-ban.

Ha a fájl teljes elérési útját szeretné visszaadni, beleértve a nevet, hívja meg a GetFilePathot. Ha csak a fájl nevét szeretné visszaadni, hívja meg a GetFileName nevet.

példa

Lásd a GetFileName példát.

CFile::GetLength

Bájtban beolvasja a fájl aktuális logikai hosszát.

virtual ULONGLONG GetLength() const;

Visszaadott érték

A fájl hossza.

példa

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

Lekérte a fájlmutató aktuális értékét, amely a későbbi hívásokban Seekhasználható.

virtual ULONGLONG GetPosition() const;

Visszaadott érték

A fájlmutató.

példa

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

Ez a metódus egy adott CFile objektumpéldányhoz vagy egy adott fájl elérési úthoz kapcsolódó állapotinformációkat kér le.

BOOL GetStatus(CFileStatus& rStatus) const;

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

Paraméterek

rStatus
Egy felhasználó által megadott CFileStatus struktúrára mutató hivatkozás, amely megkapja az állapotinformációkat. A CFileStatus struktúra a következő mezőket tartalmazza:

  • CTime m_ctime A fájl létrehozásának dátuma és időpontja.

  • CTime m_mtime A fájl utolsó módosításának dátuma és időpontja.

  • CTime m_atime A fájl utolsó olvasási dátuma és időpontja.

  • ULONGLONG m_size A fájl logikai mérete bájtban, a DIR parancs jelentése szerint.

  • BYTE m_attribute A fájl attribútum bájtja.

  • char m_szFullName[_MAX_PATH] A Windows-karakterkészlet abszolút fájlneve.

lpszFileName
A Windows-karakterkészlet egy sztringje, amely a kívánt fájl elérési útja. Az elérési út lehet relatív vagy abszolút, vagy tartalmazhat hálózati elérési utat.

pTM-
Mutató a CAtlTransactionManager objektumra

Visszaadott érték

IGAZ, ha a megadott fájl állapotadatai sikeresen lekértek; egyéb esetben HAMIS.

Megjegyzések

A nem statikus verzió GetStatus lekéri az adott CFile objektumhoz társított megnyitott fájl állapotadatait. A statikus verzió egy adott fájl elérési útjáról szerzi GetStatus be a fájl állapotát anélkül, hogy ténylegesen megnyitná a fájlt. Ez a verzió hasznos egy fájl létezésének és hozzáférési jogosultságainak teszteléséhez.

A m_attribute struktúra tagja a CFileStatus fájlattribútum-készletre hivatkozik. Az CFile osztály biztosítja az attribútumok számbavételi típusát, hogy a fájlattribútumok szimbolikusan megadhatók legyenek:

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

példa

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

Meghatározza, hogy van-e érvényes fájlleíró az CFile objektumhoz.

static AFX_DATA const HANDLE hFileNull;

Megjegyzések

Ez az állandó határozza meg, hogy az CFile objektum rendelkezik-e érvényes fájlleíróval.

Az alábbi példa ezt a műveletet mutatja be:

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

CFile::LockRange

Egy megnyitott fájl bájttartományának zárolása kivételt eredményez, ha a fájl már zárolva van.

virtual void LockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Paraméterek

dwPos
A zárolni kívánt bájttartomány kezdőértékének bájteltolása.

dwCount
A zárolni kívánt tartomány bájtjainak száma.

Megjegyzések

A fájlokban lévő bájtok zárolása megakadályozza, hogy más folyamatok hozzáférjenek ezekhez a bájtokhoz. A fájl egynél több régióját zárolhatja, de átfedésben lévő régiók nem engedélyezettek.

Ha a tagfüggvény használatával oldja fel a UnlockRange régió zárolását, a bájttartománynak pontosan meg kell egyeznie a korábban zárolt régióval. A LockRange függvény nem egyesít szomszédos régiókat. Ha két zárolt régió van egymás mellett, külön kell feloldania az egyes régiók zárolását.

Megjegyzés:

Ez a függvény nem érhető el a CMemFile-származtatott osztályhoz.

példa

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

Egy megnyitott fájl operációsrendszer-fájlleírója.

HANDLE m_hFile;

Megjegyzések

m_hFile az UINT típusú nyilvános változó. Egy operációs rendszerfüggetlen üres fájljelzőt tartalmaz CFile::hFileNull, ha a leíró nincs hozzárendelve.

m_hFile A használata nem ajánlott, mert a tag jelentése a származtatott osztálytól függ. m_hFile az osztály nem apolymorfikus használatának támogatása érdekében nyilvános taggá vált.

CFile::m_pTM

Mutasson egy CAtlTransactionManager objektumra.

CAtlTransactionManager* m_pTM;

Megjegyzések

CFile::Open

Túlterhelt. Open az alapértelmezett CFile konstruktorhoz készült.

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

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

Paraméterek

lpszFileName
A kívánt fájl elérési útját tartalmazó sztring. Az elérési út lehet relatív, abszolút vagy hálózati név (UNC).

nOpenFlags
A fájl megosztási és hozzáférési módját meghatározó UINT. Meghatározza a fájl megnyitásakor végrehajtandó műveletet. A beállításokat a bitenkénti VAGY ( | ) operátorral kombinálhatja. Egy hozzáférési engedélyre és egy megosztási lehetőségre van szükség; a és modeCreate a modeNoInherit módok megadása nem kötelező. A módbeállítások listáját a CFile konstruktorban találja.

pError
Egy meglévő fájlkivételi objektumra mutató mutató, amely egy sikertelen művelet állapotát fogja kapni.

pTM-
Mutató a CAtlTransactionManager objektumra

Visszaadott érték

Nonzero, ha a megnyitás sikeres volt; egyéb esetben 0. A pError paraméter csak akkor értelmezhető, ha 0 van visszaadva.

Megjegyzések

A két Open függvény "biztonságos" metódus egy fájl megnyitásához, ahol a hiba normális, elvárt állapot.

Míg a CFile konstruktor kivételt jelez egy hibafeltételben, Open a hibafeltételekhez hamis értéket ad vissza. Open azonban továbbra is inicializálhat egy CFileException objektumot a hiba leírásához. Ha nem adja meg a pError paramétert, vagy ha a pError értéke NULL, akkor hamis értéket ad vissza, Open és nem ad vissza .CFileException Ha egy mutatót egy meglévőnek CFileExceptionad át, és Open hibát tapasztal, a függvény kitölti a hibát leíró információkkal. Open egyik esetben sem ad kivételt.

Az alábbi táblázat a lehetséges eredményeket Openismerteti.

pError Hiba észlelhető Visszaadott érték CFileException tartalom
NULLA Nem IGAZ nincs adat
ptr to CFileException Nem IGAZ változatlan
NULLA Igen HAMIS nincs adat
ptr to CFileException Igen HAMIS inicializálva a hiba leírásához

példa

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

Ezzel az operátorral fogópontot adhat át egy CFile objektumnak olyan függvények számára, mint a ReadFileEx és a GetFileTime , amelyek egy HANDLE.

operator HANDLE() const;

CFile::Read

Adatokat olvas be egy pufferbe az objektumhoz CFile társított fájlból.

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

Paraméterek

lpBuf
Mutasson a felhasználó által megadott pufferre, amely fogadja a fájlból beolvasott adatokat.

nCount
A fájlból beolvasandó bájtok maximális száma. Szövegmódú fájlok esetében a kocsivisszasor hírcsatornapárjai egyetlen karakternek számítanak.

Visszaadott érték

A pufferbe átvitt bájtok száma. Az összes CFile osztály esetében a visszatérési érték kisebb lehet, mint az nCount , ha a fájl vége el lett érve.

példa

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)));

Egy másik példa: CFile::Open.

CFile::Remove

Ez a statikus függvény törli az elérési út által megadott fájlt.

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

Paraméterek

lpszFileName
Egy sztring, amely a kívánt fájl elérési útja. Az elérési út lehet relatív vagy abszolút, és tartalmazhat hálózati nevet.

pTM-
Mutató a CAtlTransactionManager objektumra

Megjegyzések

Remove nem távolít el könyvtárat.

A Remove tagfüggvény kivételt jelez, ha a csatlakoztatott fájl meg van nyitva, vagy ha a fájl nem távolítható el. Ez a függvény egyenértékű a DEL paranccsal.

példa

//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::Átnevezés

Ez a statikus függvény átnevezi a megadott fájlt.

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

Paraméterek

lpszOldName
A régi út.

lpszNewName
Az új elérési út.

pTM-
Mutató a CAtlTransactionManager objektumra

Megjegyzések

A könyvtárak nem nevezhetők át. Ez a függvény egyenértékű a REN paranccsal.

példa

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

Áthelyezi a fájlmutatót egy megnyitott fájlban.

virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);

Paraméterek

lOff
A fájlmutató áthelyezéséhez megadott bájtok száma. A pozitív értékek a fájlmutatót a fájl vége felé helyezik át; negatív értékek mozgatják a fájlmutatót a fájl elejére.

nFrom
A keresett pozíció. A lehetséges értékekért tekintse meg a Megjegyzések szakaszt.

Visszaadott érték

A fájlmutató pozíciója, ha a metódus sikeres volt; ellenkező esetben a visszatérési érték nincs definiálva, és a rendszer kivételre mutató CFileException mutatót ad.

Megjegyzések

Az alábbi táblázat az nFrom paraméter lehetséges értékeit sorolja fel.

Érték Leírás
CFile::begin Keresse meg a fájl kezdetét.
CFile::current Keresse meg a fájlmutató aktuális helyét.
CFile::end Keresse meg a fájl végét.

Amikor megnyitja a fájlt, a fájlmutató 0-ra, a fájl elejére kerül.

A fájlmutatót a fájl végén túlra is beállíthatja. Ha igen, a fájl mérete csak akkor nő, ha a fájlba ír.

A metódus kivételkezelőjének törölnie kell a kivételobjektumot a kivétel feldolgozása után.

példa

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

A fájlmutató értékét a fájl elejére állítja.

void SeekToBegin();

Megjegyzések

SeekToBegin()egyenértékű a .-nak.Seek( 0L, CFile::begin )

példa

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

CFile::SeekToEnd

A fájlmutató értékét a fájl logikai végére állítja.

ULONGLONG SeekToEnd();

Visszaadott érték

A fájl hossza bájtban.

Megjegyzések

SeekToEnd()egyenértékű a .-nak.CFile::Seek( 0L, CFile::end )

példa

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

CFile::SetFilePath

Hívja meg ezt a függvényt a fájl elérési útjának megadásához. Ha például egy fájl elérési útja nem érhető el CFile-objektum létrehozásakor, hívja meg SetFilePath , hogy adja meg.

virtual void SetFilePath(LPCTSTR lpszNewName);

Paraméterek

lpszNewName
Mutasson egy sztringre, amely megadja az új elérési utat.

Megjegyzések

Megjegyzés:

SetFilePath nem nyitja meg a fájlt, és nem hozza létre a fájlt; egyszerűen társítja az CFile objektumot egy elérési út nevével, amelyet aztán használhat.

példa

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

Hívja meg ezt a függvényt a fájl hosszának módosításához.

virtual void SetLength(ULONGLONG dwNewLen);

Paraméterek

dwNewLen
A fájl kívánt hossza bájtban. Ez az érték nagyobb vagy kisebb lehet, mint a fájl aktuális hossza. A fájl szükség szerint ki lesz bővítve vagy csonkítva.

Megjegyzések

Megjegyzés:

Ezzel CMemFilea függvénnyel egy objektumot dobhat CMemoryException .

példa

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

CFile::SetStatus

Beállítja a fájl helyéhez társított fájl állapotát.

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

Paraméterek

lpszFileName
Egy sztring, amely a kívánt fájl elérési útja. Az elérési út lehet relatív vagy abszolút, és tartalmazhat hálózati nevet.

állapot
Az új állapotinformációkat tartalmazó puffer. Hívja meg a GetStatus tagfüggvényt a CFileStatus struktúra aktuális értékekkel való előtöltéséhez, majd szükség szerint végezze el a módosításokat. Ha egy érték 0, akkor a megfelelő állapotelem nem frissül. A struktúra leírását a GetStatus tagfüggvényben tekintheti meg CFileStatus .

pTM-
Mutató a CAtlTransactionManager objektumra

Megjegyzések

Az idő beállításához módosítsa az m_mtimeállapotmezőt.

Ha csak a fájl attribútumainak módosítására SetStatus próbál hívást kezdeményezni, és a m_mtime fájlállapot-struktúra nem megfelelő, az attribútumokat is érintheti (az időbélyeg módosítása mellékhatásokat okozhat az attribútumokra nézve). Ha csak a fájl attribútumait szeretné módosítani, először állítsa a m_mtime fájlállapot-struktúra tagját nullára, majd hívja fel a SetStatusfájlt.

példa

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

CFile::UnlockRange

Egy megnyitott fájl bájttartományának feloldása.

virtual void UnlockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Paraméterek

dwPos
A feloldáshoz a bájttartomány elejének bájteltolása.

dwCount
A feloldandó tartomány bájtjainak száma.

Megjegyzések

A részletekért tekintse meg a LockRange tagfüggvény leírását.

Megjegyzés:

Ez a függvény nem érhető el a CMemFile-derived osztályhoz.

példa

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

Adatokat ír egy pufferből az objektumhoz társított fájlba CFile .

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

Paraméterek

lpBuf
Mutató a felhasználó által megadott pufferre, amely tartalmazza a fájlba írandó adatokat.

nCount
A pufferből átvitt bájtok száma. Szövegmódú fájlok esetében a kocsivisszasor hírcsatornapárjai egyetlen karakternek számítanak.

Megjegyzések

Write kivételt jelez több feltételre válaszul, beleértve a lemez teljes állapotát is.

példa

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();

Tekintse meg a CFile::CFile és a CFile::Open fájlra vonatkozó példákat is.

Lásd még

MFC-minta DRAWCLI
CObject osztály
hierarchiadiagram
CStdioFile osztály
CMemFile osztály