Sdílet prostřednictvím


CFile – třída

Základní třída pro třídy souborů třídy Microsoft Foundation Class.

Syntaxe

class CFile : public CObject

Členové

Veřejné konstruktory

Jméno popis
CFile::CFile CFile Vytvoří objekt z cesty nebo popisovače souboru.

Veřejné metody

Jméno popis
CFile::Abort Zavře soubor, který ignoruje všechna upozornění a chyby.
CFile::Close Zavře soubor a odstraní objekt.
CFile::D uplicita Vytvoří duplicitní objekt na základě tohoto souboru.
CFile::Flush Vyprázdní všechna data, která se ještě mají zapsat.
CFile::GetFileName Načte název souboru vybraného souboru.
CFile::GetFilePath Načte úplnou cestu k souboru vybraného souboru.
CFile::GetFileTitle Načte název vybraného souboru.
CFile::GetLength Načte délku souboru.
CFile::GetPosition Načte aktuální ukazatel souboru.
CFile::GetStatus Načte stav otevřeného souboru nebo ve statické verzi načte stav zadaného souboru (statické, virtuální funkce).
CFile::LockRange Uzamkne rozsah bajtů v souboru.
CFile::Open Sejf otevře soubor s možností testování chyb.
CFile::Read Čte (nepřipojená) data ze souboru na aktuální pozici souboru.
CFile::Remove Odstraní zadaný soubor (statickou funkci).
CFile::Rename Přejmenuje zadaný soubor (statickou funkci).
CFile::Seek Umístí aktuální ukazatel souboru.
CFile::SeekToBegin Umístí aktuální ukazatel souboru na začátek souboru.
CFile::SeekToEnd Umístí aktuální ukazatel souboru na konec souboru.
CFile::SetFilePath Nastaví úplnou cestu k souboru vybraného souboru.
CFile::SetLength Změní délku souboru.
CFile::SetStatus Nastaví stav zadaného souboru (statické, virtuální funkce).
CFile::UnlockRange Odemkne rozsah bajtů v souboru.
CFile::Write Zapisuje data (bez vyrovnávacího zápisu) do souboru do aktuální pozice souboru.

Veřejné operátory

Jméno popis
CFile::operator HANDLE Popisovač objektu CFile .

Veřejné datové členy

Jméno popis
CFile::hFileNull Určuje, zda má CFile objekt platný popisovač.
CFile::m_hFile Obvykle obsahuje popisovač souboru operačního systému.

Chráněné datové členy

Jméno popis
CFile::m_pTM Ukazatel na CAtlTransactionManager objekt

Poznámky

Přímo poskytuje nepřečtené, binární disk vstupní/výstupní služby a nepřímo podporuje textové soubory a paměťové soubory prostřednictvím odvozených tříd. CFile funguje ve spojení s CArchive třídou pro podporu serializace objektů třídy Microsoft Foundation.

Hierarchický vztah mezi touto třídou a jeho odvozenými třídami umožňuje programu pracovat se všemi objekty souborů prostřednictvím polymorfického CFile rozhraní. Například soubor paměti se chová jako soubor disku.

Používejte CFile a jeho odvozené třídy pro vstupně-výstupní operace disku pro obecné účely. Použijte ofstream nebo jiné třídy Společnosti Microsoft iostream pro formátovaný text odeslaný do souboru disku.

Za normálních okolností je soubor disku otevřen automaticky při CFile konstrukci a uzavřen při zničení. Statické členské funkce umožňují interrogovat stav souboru bez otevření souboru.

Další informace o použití CFilenaleznete v článcích Soubory v prostředí MFC a Zpracování souborů v referenční dokumentaci knihovny za běhu.

Hierarchie dědičnosti

Objekt CObject

CFile

Požadavky

Hlavička: afx.h

CFile::Abort

Zavře soubor přidružený k tomuto objektu a znepřístupní soubor pro čtení nebo zápis.

virtual void Abort();

Poznámky

Pokud jste soubor ještě před zničením objektu nezavřeli, destruktor ho za vás zavře.

Při zpracování výjimek se liší od CFile::Close dvou důležitých CFile::Abort způsobů. Za prvé, Abort funkce nevyvolá výjimku při selhání, protože chyby jsou ignorovány Abort. Za druhé, nebude ASSERT, Abort pokud soubor nebyl otevřen nebo byl dříve zavřen.

Pokud jste objekt new přidělil CFile na haldě, musíte ho po zavření souboru odstranit. Abort nastaví m_hFile na CFile::hFileNull.

Příklad

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

Vytvoří a inicializuje CFile objekt.

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

CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);

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

Parametry

hFile
Popisovač souboru, který se má připojit k objektu CFile

lpszFileName
Relativní nebo úplná cesta k souboru pro připojení k objektu CFile .

nOpenFlags
Bitová kombinace (OR) možností přístupu k souboru pro zadaný soubor. Možné možnosti najdete v části Poznámky.

Ptm
Ukazatel na objekt CAtlTransactionManager

Poznámky

Následující pět tabulek uvádí možné možnosti pro parametr nOpenFlags .

Zvolte pouze jednu z následujících možností režimu přístupu k souborům. Výchozí režim přístupu k souborům je CFile::modeRead, který je jen pro čtení.

Hodnota popis
CFile::modeRead Vyžaduje přístup jen pro čtení.
CFile::modeWrite Vyžaduje pouze přístup k zápisu.
CFile::modeReadWrite Požadavky na přístup ke čtení a zápisu.

Zvolte jednu z následujících možností režimu znaků.

Hodnota popis
CFile::typeBinary Nastaví binární režim (používá se pouze v odvozených třídách).
CFile::typeText Nastaví textový režim se speciálním zpracováním pro páry návratového řádku řádku na začátek řádku (používá se pouze v odvozených třídách).
CFile::typeUnicode Nastaví režim Unicode (používá se pouze v odvozených třídách). Text se zapíše do souboru ve formátu Unicode, když je aplikace vytvořená v konfiguraci Unicode. Do souboru není zapsán žádný kusovník.

Zvolte pouze jednu z následujících možností režimu sdílené složky. Výchozí režim sdílené složky je CFile::shareExclusive, který je výhradní.

Hodnota popis
CFile::shareDenyNone Žádná omezení sdílení.
CFile::shareDenyRead Odepře přístup ke čtení všem ostatním.
CFile::shareDenyWrite Odepře přístup k zápisu všem ostatním.
CFile::shareExclusive Odepře přístup ke čtení a zápisu všem ostatním.

Zvolte první nebo obě z následujících možností režimu vytváření souborů. Výchozí režim vytváření je CFile::modeNoTruncate, který je otevřen existující.

Hodnota popis
CFile::modeCreate Vytvoří nový soubor, pokud neexistuje žádný soubor. Pokud soubor již existuje, přepíše se a zpočátku nastaví na nulovou délku.
CFile::modeNoTruncate Vytvoří nový soubor, pokud neexistuje žádný soubor; v opačném případě, pokud soubor již existuje, je připojen k objektu CFile .

Zvolte následující možnosti ukládání souborů do mezipaměti, jak je popsáno. Ve výchozím nastavení systém používá schéma ukládání do mezipaměti pro obecné účely, které není k dispozici jako možnost.

Hodnota popis
CFile::osNoBuffer Systém pro soubor nepoužívá zprostředkující mezipaměť. Tato možnost zruší následující 2 možnosti.
CFile::osRandomAccess Mezipaměť souborů je optimalizovaná pro náhodný přístup. Tuto možnost ani sekvenční kontrolu nepoužívejte.
CFile::osSequentialScan Mezipaměť souborů je optimalizovaná pro sekvenční přístup. Nepoužívejte tuto možnost i možnost náhodného přístupu.
CFile::osWriteThrough Operace zápisu se provádějí bez zpoždění.

Pokud chcete zabránit zdědění popisovač souboru, zvolte následující možnost zabezpečení. Ve výchozím nastavení můžou všechny nové podřízené procesy používat popisovač souboru.

Hodnota popis
CFile::modeNoInherit Zabrání jakýmkoli podřízeným procesům v používání popisovače souboru.

Výchozí konstruktor inicializuje členy, ale nepřipočítá k objektu CFile soubor. Po použití tohoto konstruktoru pomocí CFile::Open metoda otevřete soubor a připojte ho k objektu CFile .

Konstruktor s jedním parametrem inicializuje členy a připojí existující soubor k objektu CFile .

Konstruktor se dvěma parametry inicializuje členy a pokusí se otevřít zadaný soubor. Pokud tento konstruktor úspěšně otevře zadaný soubor, soubor je připojen k objektu CFile ; jinak tento konstruktor vyvolá ukazatel na CInvalidArgException objekt. Další informace o zpracování výjimek naleznete v tématu Výjimky.

CFile Pokud objekt úspěšně otevře zadaný soubor, zavře tento soubor automaticky při CFile zničení objektu. V opačném případě musíte soubor explicitně zavřít, jakmile se už k objektu CFile nepřipojuje.

Příklad

Následující kód ukazuje, jak použít 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

Zavře soubor přidružený k tomuto objektu a znepřístupní soubor pro čtení nebo zápis.

virtual void Close();

Poznámky

Pokud jste soubor ještě před zničením objektu nezavřeli, destruktor ho za vás zavře.

Pokud jste objekt new přidělil CFile na haldě, musíte ho po zavření souboru odstranit. Close nastaví m_hFile na CFile::hFileNull.

Příklad

Podívejte se na příklad pro CFile::CFile.

CFile::D uplicita

Vytvoří duplicitní CFile objekt pro daný soubor.

virtual CFile* Duplicate() const;

Vrácená hodnota

Ukazatel na duplicitní CFile objekt.

Poznámky

Tato funkce je ekvivalentní funkci runtime jazyka _dupC .

CFile::Flush

Vynutí zápis všech dat zbývajících v vyrovnávací paměti souboru do souboru.

virtual void Flush();

Poznámky

Použití Flush nezaručuje vyprázdnění vyrovnávacích CArchive pamětí. Pokud používáte archiv, nejprve volejte CArchive::Flush .

Příklad

Podívejte se na příklad pro CFile::SetFilePath.

CFile::GetFileName

Voláním této členské funkce načtěte název zadaného souboru.

virtual CString GetFileName() const;

Vrácená hodnota

Název souboru.

Poznámky

Když například zavoláte GetFileName , aby se uživateli vygenerovala zpráva o souboru c:\windows\write\myfile.wri, vrátí se název souboru myfile.wri.

Chcete-li vrátit celou cestu k souboru, včetně názvu, zavolejte GetFilePath. Chcete-li vrátit název souboru ( myfile), volání GetFileTitle.

Příklad

Tento fragment kódu otevře systém. SOUBOR INI ve vašem adresáři WINDOWS. Pokud se najde, v příkladu se vytiskne název a cesta a název, jak je znázorněno v části Výstup:

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

Voláním této členské funkce načtěte úplnou cestu k zadanému souboru.

virtual CString GetFilePath() const;

Vrácená hodnota

Úplná cesta zadaného souboru.

Poznámky

Když například zavoláteGetFilePath, aby se uživateli vygenerovala zpráva o souboru, vrátí se cesta k c:\windows\write\myfile.wrisouboruc:\windows\write\myfile.wri.

Chcete-li vrátit pouze název souboru (myfile.wri), zavolejte GetFileName. Chcete-li vrátit název souboru (myfile), zavolejte GetFileTitle.

Příklad

Podívejte se na příklad pro GetFileName.

CFile::GetFileTitle

Voláním této členské funkce načtěte název souboru (zobrazovaný název) souboru.

virtual CString GetFileTitle() const;

Vrácená hodnota

Název podkladového souboru.

Poznámky

Tato metoda volá GetFileTitle k načtení názvu souboru. V případě úspěchu vrátí metoda řetězec, který by systém použil k zobrazení názvu souboru uživateli. Jinak metoda volá PathFindFileName k načtení názvu souboru (včetně přípony souboru) podkladového souboru. To znamená, že přípona souboru není vždy zahrnuta do vráceného řetězce názvu souboru. Další informace naleznete v tématu GetFileTitle a PathFindFileName v sadě Windows SDK.

Chcete-li vrátit celou cestu k souboru, včetně názvu, zavolejte GetFilePath. Chcete-li vrátit pouze název souboru, zavolejte GetFileName.

Příklad

Podívejte se na příklad pro GetFileName.

CFile::GetLength

Získá aktuální logickou délku souboru v bajtech.

virtual ULONGLONG GetLength() const;

Vrácená hodnota

Délka souboru.

Příklad

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

Získá aktuální hodnotu ukazatele souboru, který lze použít v pozdějších voláních Seek.

virtual ULONGLONG GetPosition() const;

Vrácená hodnota

Ukazatel souboru.

Příklad

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

Tato metoda načte informace o stavu související s danou CFile instancí objektu nebo danou cestou k souboru.

BOOL GetStatus(CFileStatus& rStatus) const;

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

Parametry

rStatus
Odkaz na uživatelem zadanou CFileStatus strukturu, která obdrží informace o stavu. Struktura CFileStatus má následující pole:

  • CTime m_ctime Datum a čas vytvoření souboru.

  • CTime m_mtime Datum a čas poslední změny souboru.

  • CTime m_atime Datum a čas posledního přístupu k souboru pro čtení.

  • ULONGLONG m_size Logická velikost souboru v bajtech, jak je hlášeno příkazem DIR.

  • BYTE m_attribute Bajt atributu souboru.

  • char m_szFullName[_MAX_PATH] Absolutní název souboru v znakové sadě Windows.

lpszFileName
Řetězec ve znakové sadě Windows, která je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní nebo může obsahovat název síťové cesty.

Ptm
Ukazatel na objekt CAtlTransactionManager

Vrácená hodnota

TRUE, pokud jsou informace o stavu pro zadaný soubor úspěšně získány; jinak NEPRAVDA.

Poznámky

Nestatická verze načte informace o stavu otevřeného GetStatus souboru přidruženého k danému CFile objektu. Statická verze GetStatus získá stav souboru z dané cesty k souboru bez skutečného otevření souboru. Tato verze je užitečná pro testování existence a přístupových práv k souboru.

Člen m_attributeCFileStatus struktury odkazuje na sadu atributů souboru. Třída CFile poskytuje typ výčtu atributu, takže atributy souboru lze specifikovat symbolicky:

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

Příklad

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

Určuje přítomnost platného popisovače souboru pro CFile objekt.

static AFX_DATA const HANDLE hFileNull;

Poznámky

Tato konstanta slouží k určení, zda CFile má objekt platný popisovač souboru.

Následující příklad ukazuje tuto operaci:

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

CFile::LockRange

Uzamkne rozsah bajtů v otevřeném souboru a vyvolá výjimku, pokud je soubor již uzamčený.

virtual void LockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Parametry

DwPos
Posun bajtu začátku rozsahu bajtů, který se má uzamknout.

dwCount
Počet bajtů v rozsahu, který chcete uzamknout.

Poznámky

Uzamčení bajtů v souboru brání přístupu k těmto bajtům jinými procesy. Můžete uzamknout více než jednu oblast souboru, ale nejsou povoleny žádné překrývající se oblasti.

Když oblast odemknete pomocí UnlockRange členské funkce, rozsah bajtů musí přesně odpovídat oblasti, která byla dříve uzamčena. Funkce LockRange nesloučí sousední oblasti. Pokud sousedí dvě uzamčené oblasti, musíte každou oblast odemknout zvlášť.

Poznámka

Tato funkce není k dispozici pro -odvozenou CMemFiletřídu.

Příklad

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

Obsahuje popisovač souboru operačního systému pro otevřený soubor.

HANDLE m_hFile;

Poznámky

m_hFile je veřejná proměnná typu UINT. Obsahuje CFile::hFileNullindikátor prázdného souboru nezávislý na operačním systému, pokud nebyl přiřazen popisovač.

m_hFile Použití se nedoporučuje, protože význam člena závisí na odvozené třídě. m_hFile je určena jako veřejný člen pro usnadnění podpory nepolymorfního použití třídy.

CFile::m_pTM

Ukazatel na CAtlTransactionManager objekt.

CAtlTransactionManager* m_pTM;

Poznámky

CFile::Open

Přetíženo. Open je určen pro použití s výchozím CFile konstruktorem.

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

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

Parametry

lpszFileName
Řetězec, který obsahuje cestu k požadovanému souboru. Cesta může být relativní, absolutní nebo název sítě (UNC).

nOpenFlags
UINT, který definuje režim sdílení a přístupu souboru. Určuje akci, která se má provést při otevření souboru. Možnosti můžete kombinovat pomocí operátoru bitwise-OR ( | ). Vyžaduje se jedno oprávnění přístupu a jedna možnost sdílení; a modeCreatemodeNoInherit režimy jsou volitelné. Seznam možností režimu najdete v konstruktoru CFile .

Chyba pError
Ukazatel na existující objekt výjimky souboru, který obdrží stav neúspěšné operace.

Ptm
Ukazatel na objekt CAtlTransactionManager

Vrácená hodnota

Nenulové, pokud bylo otevření úspěšné; jinak 0. Parametr pError je smysluplný pouze v případě, že se vrátí hodnota 0.

Poznámky

Open Dvě funkce jsou "bezpečné" metody pro otevření souboru, kde selhání je normální očekávaná podmínka.

CFile Zatímco konstruktor vyvolá výjimku v chybovém stavu, Open vrátí hodnotu FALSE pro chybové podmínky. Open může stále inicializovat CFileException objekt popis chyby, ale. Pokud nezadáte parametr pError nebo pokud předáte hodnotu NULL pro chybu pError, Open vrátí hodnotu FALSE a nevyvolá CFileExceptionchybu . Pokud předáte ukazatel existujícímu objektu CFileExceptiona Open dojde k chybě, funkce ji vyplní informacemi popisujícími tuto chybu. Open v obou případech nevyvolá výjimku.

Následující tabulka popisuje možné výsledky .Open

pError Došlo k chybě. Vrácená hodnota Obsah CFileException
NULL Číslo TRUE nelze použít
ptr to CFileException Číslo TRUE Nezměněn
NULL Ano FALSE nelze použít
ptr to CFileException Ano FALSE inicializováno k popisu chyby

Příklad

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

Pomocí tohoto operátoru předejte popisovač objektu CFile funkcím, jako je ReadFileEx a GetFileTime, které očekávají .HANDLE

operator HANDLE() const;

CFile::Read

Načte data do vyrovnávací paměti ze souboru přidruženého k objektu CFile .

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

Parametry

lpBuf
Ukazatel na uživatelsky zadanou vyrovnávací paměť, která přijímá data načtená ze souboru.

nCount
Maximální počet bajtů,kteréch U souborů v textovém režimu se páry návratového řádku řádku počítají jako jednotlivé znaky.

Vrácená hodnota

Počet bajtů přenesených do vyrovnávací paměti. U všech CFile tříd může být návratová hodnota menší než nCount , pokud byl dosažen konec souboru.

Příklad

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

Další příklad najdete v tématu CFile::Open.

CFile::Remove

Tato statická funkce odstraní soubor určený cestou.

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

Parametry

lpszFileName
Řetězec, který je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní a může obsahovat název sítě.

Ptm
Ukazatel na objekt CAtlTransactionManager

Poznámky

Remove neodebere adresář.

Členová Remove funkce vyvolá výjimku, pokud je připojený soubor otevřený nebo pokud soubor nelze odebrat. Tato funkce je ekvivalentní příkazu DEL.

Příklad

//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

Tato statická funkce přejmenuje zadaný soubor.

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

Parametry

lpszOldName
Stará cesta.

lpszNewName
Nová cesta.

Ptm
Ukazatel na objekt CAtlTransactionManager

Poznámky

Adresáře nelze přejmenovat. Tato funkce je ekvivalentní příkazu REN.

Příklad

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

Přemísťuje ukazatel souboru do otevřeného souboru.

virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);

Parametry

LOff
Počet bajtů pro přesunutí ukazatele souboru Kladné hodnoty přesunou ukazatel souboru na konec souboru; záporné hodnoty přesunou ukazatel souboru na začátek souboru.

nFrom
Pozice, ze které se má hledat. Možné hodnoty najdete v části Poznámky.

Vrácená hodnota

Pozice ukazatele souboru, pokud byla metoda úspěšná; v opačném případě je vrácená hodnota nedefinovaná a vyvolá se ukazatel na CFileException výjimku.

Poznámky

Následující tabulka uvádí možné hodnoty pro parametr nFrom .

Hodnota popis
CFile::begin Vyhledejte ho od začátku souboru.
CFile::current Vyhledejte z aktuálního umístění ukazatele souboru.
CFile::end Vyhledejte ho od konce souboru.

Při otevření souboru je ukazatel souboru umístěn na 0, začátek souboru.

Ukazatel souboru můžete nastavit na pozici nad koncem souboru. Pokud to uděláte, velikost souboru se nezvětší, dokud do souboru nezapíšete.

Obslužná rutina výjimky pro tuto metodu musí odstranit objekt výjimky po zpracování výjimky.

Příklad

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

Nastaví hodnotu ukazatele souboru na začátek souboru.

void SeekToBegin();

Poznámky

SeekToBegin() je ekvivalent Seek( 0L, CFile::begin ).

Příklad

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

CFile::SeekToEnd

Nastaví hodnotu ukazatele souboru na logický konec souboru.

ULONGLONG SeekToEnd();

Vrácená hodnota

Délka souboru vbajchch

Poznámky

SeekToEnd() je ekvivalent CFile::Seek( 0L, CFile::end ).

Příklad

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

CFile::SetFilePath

Voláním této funkce určíte cestu k souboru. Pokud například cesta k souboru není k dispozici při vytváření objektu CFile , volání SetFilePath , které ho poskytne.

virtual void SetFilePath(LPCTSTR lpszNewName);

Parametry

lpszNewName
Ukazatel na řetězec určující novou cestu.

Poznámky

Poznámka

SetFilePath neotevře soubor ani nevytvoří soubor; jednoduše přidruží CFile objekt k názvu cesty, který se pak dá použít.

Příklad

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

Voláním této funkce můžete změnit délku souboru.

virtual void SetLength(ULONGLONG dwNewLen);

Parametry

dwNewLen
Požadovaná délka souboru v bajtech Tato hodnota může být větší nebo menší než aktuální délka souboru. Soubor se podle potřeby rozšíří nebo zkrátí.

Poznámky

Poznámka

V případě CMemFile, že by tato funkce mohla vyvolat CMemoryException objekt.

Příklad

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

CFile::SetStatus

Nastaví stav souboru přidruženého k tomuto umístění souboru.

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

Parametry

lpszFileName
Řetězec, který je cestou k požadovanému souboru. Cesta může být relativní nebo absolutní a může obsahovat název sítě.

status
Vyrovnávací paměť obsahující nové informace o stavu. Voláním GetStatus členské funkce předvyplníte CFileStatus strukturu aktuálními hodnotami a podle potřeby proveďte změny. Pokud je hodnota 0, odpovídající položka stavu se neaktualizuje. Popis CFileStatus struktury najdete v členské funkci GetStatus.

Ptm
Ukazatel na objekt CAtlTransactionManager

Poznámky

Pokud chcete nastavit čas, upravte m_mtime pole stavu.

Při volání SetStatus při pokusu o změnu pouze atributů souboru a m_mtime člen stavové struktury souboru je nenulový, mohou být ovlivněny i atributy (změna časového razítka může mít vedlejší účinky na atributy). Pokud chcete změnit pouze atributy souboru, nejprve nastavte m_mtime člen struktury stavu souboru na nulu a pak proveďte volání SetStatus.

Příklad

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

CFile::UnlockRange

Odemkne rozsah bajtů v otevřeném souboru.

virtual void UnlockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Parametry

DwPos
Posun bajtu od začátku rozsahu bajtů, který se má odemknout.

dwCount
Počet bajtů v rozsahu, který se má odemknout.

Poznámky

Podrobnosti najdete v popisu členské funkce LockRange .

Poznámka

Tato funkce není k dispozici pro -odvozenou CMemFiletřídu.

Příklad

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

Zapíše data z vyrovnávací paměti do souboru přidruženého k objektu CFile .

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

Parametry

lpBuf
Ukazatel na vyrovnávací paměť zadanou uživatelem, která obsahuje data, která se mají zapisovat do souboru.

nCount
Početch U souborů v textovém režimu se páry návratového řádku řádku počítají jako jednotlivé znaky.

Poznámky

Write vyvolá výjimku v reakci na několik podmínek, včetně podmínky plného disku.

Příklad

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

Podívejte se také na příklady pro CFile::CFile a CFile::Open.

Viz také

MFC – ukázka DRAWCLI
CObject – třída
Graf hierarchie
CStdioFile – třída
CMemFile – třída