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
Veri Akışı Adı | Açıklama |
---|---|
CFile::CFile | CFile Bir yol veya dosya tanıtıcısından nesne oluşturur. |
Genel Yöntemler
Veri Akışı Adı | Açıklama |
---|---|
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 | Hata testi seçeneği olan bir dosyayı güvenli bir şekilde 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
Veri Akışı Adı | Açıklama |
---|---|
CFile::operator HANDLE | Nesnenin tanıtıcısı CFile . |
Ortak Veri Üyeleri
Veri Akışı Adı | Açıklama |
---|---|
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
Veri Akışı Adı | Açıklama |
---|---|
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 CFile
hakkı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
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 Abort
yoksayı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. Abort
CFile::hFileNull
olarak 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::modeRead
salt okunur olan modudur.
Value | Açıklama |
---|---|
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.
Value | Açıklama |
---|---|
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.
Value | Açıklama |
---|---|
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::modeNoTruncate
var olan açık olan modudur.
Value | Açıklama |
---|---|
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.
Value | Açıklama |
---|---|
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.
Value | Açıklama |
---|---|
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. Close
CFile::hFileNull
olarak ayarlarm_hFile
.
Örnek
CFile::D uplicate
Belirli bir dosya için yinelenen CFile
bir nesne oluşturur.
virtual CFile* Duplicate() const;
Dönüş Değeri
Yinelenen CFile
bir nesnenin işaretçisi.
Açıklamalar
Bu işlev, C çalışma zamanı işlevine _dup
eş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;
Dönüş Değeri
Dosyanın adı.
Açıklamalar
Örneğin, kullanıcıya dosya adı myfile.wri
, dosyası c:\windows\write\myfile.wri
hakkı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;
Dönüş 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.wri
yolu , c:\windows\write\myfile.wri
dö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;
Dönüş 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;
Dönüş 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 Seek
yapılan çağrılarda kullanılabilir.
virtual ULONGLONG GetPosition() const;
Dönüş 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
Dönüş 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_attribute
CFileStatus
ü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.
Not
Bu işlev - türetilmiş sınıf için CMemFile
kullanı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
Dönüş 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 CFileException
bir öğ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ı Open
açıklanmaktadır.
pError |
Hatayla karşılaşıldı | Dönüş değeri | CFileException içeriği |
---|---|---|---|
NULL | Hayır | TRUE | yok |
ptr CFileException |
Hayır | TRUE | Değişme -den |
NULL | Yes | FALSE | yok |
ptr CFileException |
Yes | 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 HANDLE
iş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.
Dönüş 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.
Dönüş 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.
Value | Açıklama |
---|---|
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();
Dönüş 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
Not
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
Not
ile CMemFile
bu 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.
durum
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 SetStatus
bir ç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.
Not
Bu işlev - türetilmiş sınıf için CMemFile
kullanı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ı