Aracılığıyla paylaş


CFile Sınıfı

Microsoft Foundation Sınıfı dosya sınıfları için temel sınıf.

Sözdizimi

class CFile : public CObject

Üyeler

Ortak Oluşturucular

Ad Tanım
CFile::CFile CFile Bir yol veya dosya tanıtıcısından nesne oluşturur.

Genel Yöntemler

Ad Tanım
CFile::Abort Tüm uyarıları ve hataları yoksayarak dosyayı kapatır.
CFile::Close Bir dosyayı kapatır ve nesneyi siler.
CFile::D uplicate Bu dosyayı temel alan yinelenen bir nesne oluşturur.
CFile::Flush Henüz yazılmayan verileri temizler.
CFile::GetFileName Seçili dosyanın dosya adını alır.
CFile::GetFilePath Seçili dosyanın tam dosya yolunu alır.
CFile::GetFileTitle Seçili dosyanın başlığını alır.
CFile::GetLength Dosyanın uzunluğunu alır.
CFile::GetPosition Geçerli dosya işaretçisini alır.
CFile::GetStatus Açık dosyanın durumunu alır veya statik sürümde belirtilen dosyanın durumunu alır (statik, sanal işlev).
CFile::LockRange Bir dosyadaki bayt aralığını kilitler.
CFile::Open Kasa hata testi seçeneğine sahip bir dosya açar.
CFile::Read Geçerli dosya konumundaki bir dosyadaki verileri okur (kaldırılmış).
CFile::Remove Belirtilen dosyayı (statik işlev) siler.
CFile::Rename Belirtilen dosyayı (statik işlev) yeniden adlandırır.
CFile::Seek Geçerli dosya işaretçisini konumlandırın.
CFile::SeekToBegin Geçerli dosya işaretçisini dosyanın başına konumlandırın.
CFile::SeekToEnd Geçerli dosya işaretçisini dosyanın sonuna konumlandırın.
CFile::SetFilePath Seçili dosyanın tam dosya yolunu ayarlar.
CFile::SetLength Dosyanın uzunluğunu değiştirir.
CFile::SetStatus Belirtilen dosyanın durumunu ayarlar (statik, sanal işlev).
CFile::UnlockRange Bir dosyadaki bayt aralığının kilidini açar.
CFile::Write Bir dosyadaki verileri geçerli dosya konumuna yazar (kaldırılmış).

Ortak İşleçler

Ad Tanım
CFile::operator HANDLE Nesnenin tanıtıcısı CFile .

Ortak Veri Üyeleri

Ad Tanım
CFile::hFileNull Nesnenin geçerli bir tanıtıcısı CFile olup olmadığını belirler.
CFile::m_hFile Genellikle işletim sistemi dosya tanıtıcısını içerir.

Korumalı Veri Üyeleri

Ad Tanım
CFile::m_pTM Nesne işaretçisi CAtlTransactionManager .

Açıklamalar

Doğrudan kasalanmamış ikili disk giriş/çıkış hizmetleri sağlar ve türetilmiş sınıfları aracılığıyla metin dosyalarını ve bellek dosyalarını dolaylı olarak destekler. CFile , Microsoft Foundation Sınıf nesnelerinin CArchive seri hale getirilmesini desteklemek için sınıfıyla birlikte çalışır.

Bu sınıf ile türetilmiş sınıfları arasındaki hiyerarşik ilişki, programınızın polimorfik CFile arabirim aracılığıyla tüm dosya nesneleri üzerinde çalışmasına olanak tanır. Örneğin bir bellek dosyası, disk dosyası gibi davranır.

Genel amaçlı disk G/Ç için ve türetilmiş sınıflarını kullanın CFile . Disk dosyasına gönderilen biçimlendirilmiş metin için veya diğer Microsoft iostream sınıflarını kullanınofstream.

Normalde, bir disk dosyası inşaatta CFile otomatik olarak açılır ve imha üzerine kapatılır. Statik üye işlevleri, dosyayı açmadan dosyanın durumunu sorgulamanıza izin verir.

kullanma CFilehakkında daha fazla bilgi için, Çalışma Zamanı Kitaplığı Başvurusu'nda MFC'deki Dosyalar ve Dosya İşleme makalelerine bakın.

Devralma Hiyerarşisi

Cobject

CFile

Gereksinimler

Üst bilgi: afx.h

CFile::Abort

Bu nesneyle ilişkili dosyayı kapatır ve dosyayı okuma veya yazma için kullanılamaz duruma getirir.

virtual void Abort();

Açıklamalar

Nesneyi yok etmeden önce dosyayı kapatmadıysanız, yıkıcı dosyayı sizin için kapatır.

Özel durumları işlerken, CFile::Abort iki önemli yoldan farklıdır CFile::Close . İlk olarak, hatalar tarafından Abortyoksayıldığından Abort işlev hatalarda özel durum oluşturmaz. İkincisi, Abort dosya açılmamışsa veya daha önce kapatılmışsa ASSERT olmaz.

Nesneyi yığında ayırmak CFile için kullandıysanıznew, dosyayı kapattıktan sonra silmeniz gerekir. AbortCFile::hFileNullolarak ayarlarm_hFile.

Örnek

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

Bir CFile nesneyi oluşturur ve başlatır.

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

CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);

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

Parametreler

hFile
Nesneye eklenecek CFile dosyanın tanıtıcısı.

lpszFileName
Nesneye eklenecek CFile dosyanın göreli veya tam yolu.

nOpenFlags
Belirtilen dosya için dosya erişim seçeneklerinin bit düzeyinde bileşimi (VEYA). Olası seçenekler için Açıklamalar bölümüne bakın.

pTM
CAtlTransactionManager nesnesinin işaretçisi

Açıklamalar

Aşağıdaki beş tabloda nOpenFlags parametresi için olası seçenekler listelenmiştir.

Aşağıdaki dosya erişim modu seçeneklerinden yalnızca birini seçin. Varsayılan dosya erişim modu CFile::modeReadsalt okunur olan modudur.

Değer Tanım
CFile::modeRead Yalnızca okuma erişimi isteğinde bulunur.
CFile::modeWrite Yalnızca yazma erişimi isteğinde bulunur.
CFile::modeReadWrite Okuma ve yazma erişimi isteğinde bulunur.

Aşağıdaki karakter modu seçeneklerinden birini seçin.

Değer Tanım
CFile::typeBinary İkili modu ayarlar (yalnızca türetilmiş sınıflarda kullanılır).
CFile::typeText Satır başı satır besleme çiftleri için özel işleme ile metin modunu ayarlar (yalnızca türetilmiş sınıflarda kullanılır).
CFile::typeUnicode Unicode modunu ayarlar (yalnızca türetilmiş sınıflarda kullanılır). Uygulama bir Unicode yapılandırmasında derlendiğinde metin dosyaya Unicode biçiminde yazılır. Dosyaya hiçbir ürün reçetesi yazıldı.

Aşağıdaki dosya paylaşımı modu seçeneklerinden yalnızca birini seçin. Varsayılan dosya paylaşım modu, CFile::shareExclusiveözel olan modudur.

Değer Tanım
CFile::shareDenyNone Paylaşım kısıtlaması yok.
CFile::shareDenyRead Diğer tüm kullanıcılara okuma erişimini reddeder.
CFile::shareDenyWrite Diğer tüm kullanıcılara yazma erişimini reddeder.
CFile::shareExclusive Okuma ve yazma erişimini diğer tüm kullanıcılara reddeder.

Aşağıdaki dosya oluşturma modu seçeneklerinin ilkini veya ikisini birden seçin. Varsayılan oluşturma modu, CFile::modeNoTruncatevar olan açık olan modudur.

Değer Tanım
CFile::modeCreate Dosya yoksa yeni bir dosya oluşturur. Dosya zaten varsa, dosyanın üzerine yazılır ve başlangıçta sıfır uzunluğa ayarlanır.
CFile::modeNoTruncate Dosya yoksa yeni bir dosya oluşturur; aksi takdirde, dosya zaten varsa nesneye CFile eklenir.

Aşağıdaki dosya önbelleğe alma seçeneklerini açıklandığı gibi seçin. Varsayılan olarak, sistem seçenek olarak kullanılamayabilecek genel amaçlı bir önbelleğe alma düzeni kullanır.

Değer Tanım
CFile::osNoBuffer Sistem, dosya için ara önbellek kullanmaz. Bu seçenek aşağıdaki 2 seçeneği iptal eder.
CFile::osRandomAccess Dosya önbelleği rastgele erişim için iyileştirilmiştir. Hem bu seçeneği hem de sıralı tarama seçeneğini kullanmayın.
CFile::osSequentialScan Dosya önbelleği sıralı erişim için en iyi duruma getirilmiştir. Hem bu seçeneği hem de rastgele erişim seçeneğini kullanmayın.
CFile::osWriteThrough Yazma işlemleri gecikme olmadan yapılır.

Dosya tanıtıcısının devralınmasını önlemek için aşağıdaki güvenlik seçeneğini belirleyin. Varsayılan olarak, tüm yeni alt işlemler dosya tutamacını kullanabilir.

Değer Tanım
CFile::modeNoInherit Alt işlemlerin dosya tanıtıcısını kullanmasını engeller.

Varsayılan oluşturucu üyeleri başlatır ancak nesneye CFile dosya eklemez. Bu oluşturucuyu kullandıktan sonra CFile::Open yöntemini kullanarak bir dosyayı açın ve nesnesine CFile ekleyin.

Tek parametreli oluşturucu üyeleri başlatır ve var olan bir dosyayı nesnesine CFile ekler.

İki parametreli oluşturucu üyeleri başlatır ve belirtilen dosyayı açmaya çalışır. Bu oluşturucu belirtilen dosyayı başarıyla açarsa, dosya nesneye CFile eklenir; aksi takdirde, bu oluşturucu bir CInvalidArgException nesneye bir işaretçi atar. Özel durumları işleme hakkında daha fazla bilgi için bkz . Özel durumlar.

Bir CFile nesne belirtilen dosyayı başarıyla açarsa, nesne yok edildiğinde CFile bu dosyayı otomatik olarak kapatır; aksi takdirde, dosya artık nesneye CFile eklenmedikten sonra dosyayı açıkça kapatmanız gerekir.

Örnek

Aşağıdaki kodda nasıl kullanılacağı gösterilmektedir 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

Bu nesneyle ilişkili dosyayı kapatır ve dosyayı okuma veya yazma için kullanılamaz duruma getirir.

virtual void Close();

Açıklamalar

Nesneyi yok etmeden önce dosyayı kapatmadıysanız, yıkıcı dosyayı sizin için kapatır.

Nesneyi yığında ayırmak CFile için kullandıysanıznew, dosyayı kapattıktan sonra silmeniz gerekir. CloseCFile::hFileNullolarak ayarlarm_hFile.

Örnek

CFile::CFile örneğine bakın.

CFile::D uplicate

Belirli bir dosya için yinelenen CFile bir nesne oluşturur.

virtual CFile* Duplicate() const;

İade Değeri

Yinelenen CFile bir nesnenin işaretçisi.

Açıklamalar

Bu işlev, C çalışma zamanı işlevine _dupeşdeğerdir.

CFile::Flush

Dosya arabelleğinde kalan tüm verileri dosyaya yazılacak şekilde zorlar.

virtual void Flush();

Açıklamalar

kullanımı Flush arabelleklerin CArchive boşaltılması garanti etmez. Arşiv kullanıyorsanız önce CArchive::Flush'ı çağırabilirsiniz.

Örnek

CFile::SetFilePath örneğine bakın.

CFile::GetFileName

Belirtilen dosyanın adını almak için bu üye işlevini çağırın.

virtual CString GetFileName() const;

İade Değeri

Dosyanın adı.

Açıklamalar

Örneğin, kullanıcıya dosya adı myfile.wri, dosyası c:\windows\write\myfile.wrihakkında bir ileti oluşturmak için çağırdığınızda GetFileName döndürülür.

Ad da dahil olmak üzere dosyanın yolunun tamamını döndürmek için GetFilePath'i çağırın. Dosyanın ( myfile) başlığını döndürmek için GetFileTitle'ı çağırın.

Örnek

Bu kod parçası SYSTEM'i açar. WINDOWS dizininizdeki INI dosyası. Bulunursa, örnek Çıktı altında gösterildiği gibi adı, yolu ve başlığı yazdırır:

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

Belirtilen dosyanın tam yolunu almak için bu üye işlevini çağırın.

virtual CString GetFilePath() const;

İade Değeri

Belirtilen dosyanın tam yolu.

Açıklamalar

Örneğin, kullanıcıya dosyası hakkında bir ileti oluşturmak için çağırdığınızda GetFilePath , dosya c:\windows\write\myfile.wriyolu , c:\windows\write\myfile.wridöndürülür.

Yalnızca dosyanın adını (myfile.wri ) döndürmek için GetFileName öğesini çağırın. ( dosyasınınmyfile başlığını döndürmek için GetFileTitle'ı çağırın.

Örnek

GetFileName örneğine bakın.

CFile::GetFileTitle

Dosyanın dosya başlığını (görünen ad) almak için bu üye işlevini çağırın.

virtual CString GetFileTitle() const;

İade Değeri

Temel alınan dosyanın başlığı.

Açıklamalar

Bu yöntem, dosyanın başlığını almak için GetFileTitle'ı çağırır. Başarılı olursa yöntemi, sistemin kullanıcıya dosya adını görüntülemek için kullanacağı dizeyi döndürür. Aksi takdirde yöntemi, temel alınan dosyanın dosya adını (dosya uzantısı dahil) almak için PathFindFileName öğesini çağırır. Bu, dosya uzantısının her zaman döndürülen dosya başlığı dizesine dahil olmadığı anlamına gelir. Daha fazla bilgi için bkz . Windows SDK'sında GetFileTitle ve PathFindFileName .

Ad da dahil olmak üzere dosyanın yolunun tamamını döndürmek için GetFilePath'i çağırın. Yalnızca dosyanın adını döndürmek için GetFileName öğesini çağırın.

Örnek

GetFileName örneğine bakın.

CFile::GetLength

Dosyanın geçerli mantıksal uzunluğunu bayt cinsinden alır.

virtual ULONGLONG GetLength() const;

İade Değeri

Dosyanın uzunluğu.

Örnek

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

dosya işaretçisinin geçerli değerini alır ve bu değer daha sonra 'a Seekyapılan çağrılarda kullanılabilir.

virtual ULONGLONG GetPosition() const;

İade Değeri

Dosya işaretçisi.

Örnek

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

Bu yöntem, belirli bir nesne örneği veya belirli CFile bir dosya yolu ile ilgili durum bilgilerini alır.

BOOL GetStatus(CFileStatus& rStatus) const;

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

Parametreler

rStatus
Durum bilgilerini alacak kullanıcı tarafından sağlanan CFileStatus bir yapıya başvuru. Yapı CFileStatus aşağıdaki alanlara sahiptir:

  • CTime m_ctime Dosyanın oluşturulduğu tarih ve saat.

  • CTime m_mtime Dosyanın son değiştirildiği tarih ve saat.

  • CTime m_atime Dosyanın son okuma için erişildiği tarih ve saat.

  • ULONGLONG m_size DIR komutu tarafından bildirilen bayt cinsinden dosyanın mantıksal boyutu.

  • BYTE m_attribute Dosyanın öznitelik baytı.

  • char m_szFullName[_MAX_PATH] Windows karakter kümesindeki mutlak dosya adı.

lpszFileName
Windows karakter kümesinde istenen dosyanın yolu olan bir dize. Yol göreli veya mutlak olabileceği gibi bir ağ yolu adı da içerebilir.

pTM
CAtlTransactionManager nesnesinin işaretçisi

İade Değeri

Belirtilen dosyanın durum bilgileri başarıyla alınırsa DOĞRU; aksi takdirde YANLIŞ.

Açıklamalar

statik olmayan sürümü GetStatus , verilen CFile nesneyle ilişkili açık dosyanın durum bilgilerini alır. statik sürümü GetStatus , dosyayı açmadan belirli bir dosya yolundan dosya durumunu alır. Bu sürüm, bir dosyanın varoluş ve erişim haklarını test etmede kullanışlıdır.

Yapısının m_attributeCFileStatus üyesi dosya öznitelik kümesine başvurur. sınıfı, CFile dosya özniteliklerinin sembolik olarak belirtilmesi için Öznitelik numaralandırma türünü sağlar:

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

Örnek

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

Nesne için geçerli bir dosya tanıtıcısının CFile varlığını belirler.

static AFX_DATA const HANDLE hFileNull;

Açıklamalar

Bu sabit, nesnenin geçerli bir dosya tanıtıcısı CFile olup olmadığını belirlemek için kullanılır.

Aşağıdaki örnekte bu işlem gösterilmektedir:

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

CFile::LockRange

Açık bir dosyadaki bayt aralığını kilitleyerek dosya zaten kilitliyse bir özel durum oluşturur.

virtual void LockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Parametreler

dwPos
Kilit için bayt aralığının başlangıcının bayt uzaklığı.

dwCount
Kilitlenmek üzere aralıktaki bayt sayısı.

Açıklamalar

Bir dosyadaki baytların kilitlenmesi, diğer işlemler tarafından bu baytlara erişimi engeller. Dosyanın birden fazla bölgesini kilitleyebilirsiniz, ancak çakışan bölgelere izin verilmez.

Üye işlevini kullanarak UnlockRange bölgenin kilidini açtığınızda bayt aralığı daha önce kilitlenmiş olan bölgeye tam olarak karşılık gelir. LockRange işlevi bitişik bölgeleri birleştirmez. İki kilitli bölge bitişikse, her bölgenin kilidini ayrı ayrı açmanız gerekir.

Dekont

Bu işlev - türetilmiş sınıf için CMemFilekullanılamaz.

Örnek

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

Açık bir dosyanın işletim sistemi dosya tutamacını içerir.

HANDLE m_hFile;

Açıklamalar

m_hFile UINT türünde genel bir değişkendir. tanıtıcı atanmamışsa işletim sisteminden bağımsız boş bir dosya göstergesi içerir CFile::hFileNull.

üyesinin m_hFile anlamı türetilen sınıfa bağlı olduğundan, öğesinin kullanılması önerilmez. m_hFile sınıfınınpolymorphic olmayan kullanımını desteklemek için genel üye yapılır.

CFile::m_pTM

Nesne CAtlTransactionManager işaretçisi.

CAtlTransactionManager* m_pTM;

Açıklamalar

CFile::Open

Aşırı yüklendi. Open , varsayılan CFile oluşturucu ile kullanılmak üzere tasarlanmıştır.

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

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

Parametreler

lpszFileName
İstenen dosyanın yolunu içeren bir dize. Yol göreli, mutlak veya ağ adı (UNC) olabilir.

nOpenFlags
Dosyanın paylaşım ve erişim modunu tanımlayan bir UINT. Dosyayı açarken gerçekleştirecek eylemi belirtir. Bit düzeyinde OR ( | ) işlecini kullanarak seçenekleri birleştirebilirsiniz. Bir erişim izni ve bir paylaşım seçeneği gereklidir; modeCreate ve modeNoInherit modları isteğe bağlıdır. Mod seçeneklerinin listesi için bkz. CFile oluşturucu.

pError
Başarısız bir işlemin durumunu alacak mevcut bir dosya özel durum nesnesine yönelik bir işaretçi.

pTM
CAtlTransactionManager nesnesinin işaretçisi

İade Değeri

Açık başarılı olursa sıfır olmayan; aksi takdirde 0. pError parametresi yalnızca 0 döndürülürse anlamlıdır.

Açıklamalar

İki Open işlev, bir dosyanın açılması için "güvenli" yöntemlerdir ve burada bir hata normal, beklenen bir koşuldur.

CFile Oluşturucu bir hata koşulunda özel durum oluştururken, Open hata koşulları için YANLIŞ döndürür. Open yine de hatayı açıklamak için bir CFileException nesnesi başlatabilir. pError parametresini sağlamazsanız veya pError için NULL geçirirseniz YANLIŞ Open döndürür ve oluşturmazCFileException. Var olan CFileExceptionbir öğesine bir işaretçi geçirirseniz ve Open hatayla karşılaşırsanız, işlev bunu bu hatayı açıklayan bilgilerle doldurur. Open her iki durumda da özel durum oluşturmaz.

Aşağıdaki tabloda, olası sonuçları Openaçıklanmaktadır.

pError Hatayla karşılaşıldı Dönüş değeri CFileException içeriği
NULL Hayır DOĞRU yok
ptr CFileException Hayır DOĞRU Değişme -den
NULL Evet FALSE yok
ptr CFileException Evet FALSE hatasını açıklamak için başlatıldı

Örnek

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

ReadFileEx ve GetFileTime gibi bir HANDLEişleve bir CFile tanıtıcı geçirmek için bu işleci kullanın.

operator HANDLE() const;

CFile::Read

Nesnesiyle CFile ilişkilendirilmiş dosyadan bir arabelleğe veri okur.

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

Parametreler

lpBuf
Dosyadan okunan verileri almak için kullanıcı tarafından sağlanan arabelleğe işaretçi.

nCount
Dosyadan okunacak bayt sayısı üst sınırı. Metin modu dosyaları için satır başı satır besleme çiftleri tek karakter olarak sayılır.

İade Değeri

Arabelleğe aktarılan bayt sayısı. Tüm CFile sınıflar için, dosyanın sonuna ulaşıldıysa dönüş değeri nCount değerinden küçük olabilir.

Örnek

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

Başka bir örnek için bkz . CFile::Open.

CFile::Remove

Bu statik işlev, yol tarafından belirtilen dosyayı siler.

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

Parametreler

lpszFileName
İstenen dosyanın yolu olan bir dize. Yol göreli veya mutlak olabilir ve bir ağ adı içerebilir.

pTM
CAtlTransactionManager nesnesinin işaretçisi

Açıklamalar

Remove dizini kaldırmaz.

Bağlı Remove dosya açıksa veya dosya kaldırılamıyorsa üye işlevi bir özel durum oluşturur. Bu işlev DEL komutuyla eşdeğerdir.

Örnek

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

Bu statik işlev, belirtilen dosyayı yeniden adlandırır.

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

Parametreler

lpszOldName
Eski yol.

lpszNewName
Yeni yol.

pTM
CAtlTransactionManager nesnesinin işaretçisi

Açıklamalar

Dizinler yeniden adlandırılamaz. Bu işlev REN komutuyla eşdeğerdir.

Örnek

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

Açık bir dosyada dosya işaretçisini yeniden konumlandırır.

virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);

Parametreler

lOff
Dosya işaretçisini taşımak için bayt sayısı. Pozitif değerler, dosya işaretçisini dosyanın sonuna doğru taşır; negatif değerler, dosya işaretçisini dosyanın başlangıcına doğru taşır.

nFrom
Aranacak konum. Olası değerler için Açıklamalar bölümüne bakın.

İade Değeri

Yöntem başarılı olursa dosya işaretçisinin konumu; aksi takdirde, dönüş değeri tanımsız olur ve bir CFileException özel durum işaretçisi oluşturulur.

Açıklamalar

Aşağıdaki tabloda nFrom parametresi için olası değerler listelemektedir.

Değer Tanım
CFile::begin Dosyanın başından itibaren arayın.
CFile::current Dosya işaretçisinin geçerli konumundan arama.
CFile::end Dosyanın sonundan arama.

Bir dosya açıldığında, dosya işaretçisi dosyanın başlangıcı olan 0 konumuna yerleştirilir.

Dosya işaretçisini, dosyanın sonunun ötesinde bir konuma ayarlayabilirsiniz. Bunu yaparsanız, dosyaya yazana kadar dosyanın boyutu artmıyor.

Bu yöntemin özel durum işleyicisi, özel durum işlendikten sonra özel durum nesnesini silmelidir.

Örnek

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

Dosya işaretçisinin değerini dosyanın başına ayarlar.

void SeekToBegin();

Açıklamalar

SeekToBegin() eşdeğeri, Seek( 0L, CFile::begin ) olur.

Örnek

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

CFile::SeekToEnd

Dosya işaretçisinin değerini dosyanın mantıksal ucuna ayarlar.

ULONGLONG SeekToEnd();

İade Değeri

Dosyanın bayt cinsinden uzunluğu.

Açıklamalar

SeekToEnd() eşdeğeri, CFile::Seek( 0L, CFile::end ) olur.

Örnek

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

CFile::SetFilePath

Dosyanın yolunu belirtmek için bu işlevi çağırın. Örneğin, bir CFile nesnesi oluşturulduğunda dosyanın yolu kullanılamıyorsa, bunu sağlamak için çağrısı SetFilePath yapın.

virtual void SetFilePath(LPCTSTR lpszNewName);

Parametreler

lpszNewName
Yeni yolu belirten bir dize işaretçisi.

Açıklamalar

Dekont

SetFilePath dosyayı açmaz veya oluşturmaz; nesneyi daha sonra kullanılabilecek bir yol adıyla ilişkilendirir CFile .

Örnek

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

Dosyanın uzunluğunu değiştirmek için bu işlevi çağırın.

virtual void SetLength(ULONGLONG dwNewLen);

Parametreler

dwNewLen
Dosyanın bayt cinsinden istenen uzunluğu. Bu değer, dosyanın geçerli uzunluğundan daha büyük veya daha küçük olabilir. Dosya, uygun şekilde genişletilir veya kesilir.

Açıklamalar

Dekont

ile CMemFilebu işlev bir CMemoryException nesne atabilir.

Örnek

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

CFile::SetStatus

Bu dosya konumuyla ilişkili dosyanın durumunu ayarlar.

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

Parametreler

lpszFileName
İstenen dosyanın yolu olan bir dize. Yol göreli veya mutlak olabilir ve bir ağ adı içerebilir.

status
Yeni durum bilgilerini içeren arabellek. Yapıyı GetStatus geçerli değerlerle önceden doldurmak için üye işlevini çağırın CFileStatus , ardından gerektiği gibi değişiklikler yapın. Değer 0 ise ilgili durum öğesi güncelleştirilmez. Yapının açıklaması için GetStatus üye işlevine CFileStatus bakın.

pTM
CAtlTransactionManager nesnesinin işaretçisi

Açıklamalar

Saati ayarlamak için durum alanını değiştirinm_mtime.

Yalnızca dosyanın özniteliklerini değiştirme girişiminde çağrısı yaptığınızda SetStatus ve m_mtime dosya durumu yapısının üyesi sıfırdan farklı olduğunda, öznitelikler de etkilenebilir (zaman damgasını değiştirmenin öznitelikler üzerinde yan etkileri olabilir). Yalnızca dosyanın özniteliklerini değiştirmek istiyorsanız, önce dosya durumu yapısının üyesini sıfır olarak ayarlayın m_mtime ve ardından öğesine SetStatusbir çağrı yapın.

Örnek

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

CFile::UnlockRange

Açık bir dosyadaki bayt aralığının kilidini açar.

virtual void UnlockRange(
    ULONGLONG dwPos,
    ULONGLONG dwCount);

Parametreler

dwPos
Kilidini açmak için bayt aralığının başlangıcının bayt uzaklığı.

dwCount
Aralıktaki kilidi açacak bayt sayısı.

Açıklamalar

Ayrıntılar için LockRange üye işlevinin açıklamasına bakın.

Dekont

Bu işlev - türetilmiş sınıf için CMemFilekullanılamaz.

Örnek

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

Bir arabellekten nesneyle ilişkili dosyaya CFile veri yazar.

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

Parametreler

lpBuf
Dosyaya yazılacak verileri içeren, kullanıcı tarafından sağlanan arabelleğe ilişkin bir işaretçi.

nCount
Arabellekten aktarılacak bayt sayısı. Metin modu dosyaları için satır başı satır besleme çiftleri tek karakter olarak sayılır.

Açıklamalar

Write disk dolu koşulu da dahil olmak üzere çeşitli koşullara yanıt olarak bir özel durum oluşturur.

Örnek

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

Ayrıca bkz. CFile::CFile ve CFile::Open örnekleri.

Ayrıca bkz.

MFC Örneği DRAWCLI
CObject Sınıfı
Hiyerarşi Grafiği
CStdioFile Sınıfı
CMemFile Sınıfı