Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
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
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_ctimeA fájl létrehozásának dátuma és időpontja.CTime m_mtimeA fájl utolsó módosításának dátuma és időpontja.CTime m_atimeA fájl utolsó olvasási dátuma és időpontja.ULONGLONG m_sizeA fájl logikai mérete bájtban, a DIR parancs jelentése szerint.BYTE m_attributeA 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