Kelas CFile
Kelas dasar untuk kelas file Kelas Microsoft Foundation.
Sintaks
class CFile : public CObject
Anggota
Konstruktor Publik
Nama | Deskripsi |
---|---|
CFile::CFile | Membuat CFile objek dari jalur atau handel file. |
Metode Publik
Nama | Deskripsi |
---|---|
CFile::Batalkan | Menutup file yang mengabaikan semua peringatan dan kesalahan. |
CFile::Close | Menutup file dan menghapus objek. |
CFile::D uplikat | Membuat objek duplikat berdasarkan file ini. |
CFile::Flush | Bersihkan data apa pun yang belum ditulis. |
CFile::GetFileName | Mengambil nama file dari file yang dipilih. |
CFile::GetFilePath | Mengambil jalur file lengkap dari file yang dipilih. |
CFile::GetFileTitle | Mengambil judul file terpilih. |
CFile::GetLength | Mengambil panjang file. |
CFile::GetPosition | Mengambil penunjuk file saat ini. |
CFile::GetStatus | Mengambil status file terbuka, atau dalam versi statis, mengambil status file yang ditentukan (statis, fungsi virtual). |
CFile::LockRange | Mengunci rentang byte dalam file. |
CFile::Open | Membuka file dengan aman dengan opsi pengujian kesalahan. |
CFile::Read | Membaca data (tidak dibuffer) dari file pada posisi file saat ini. |
CFile::Hapus | Menghapus file yang ditentukan (fungsi statis). |
CFile::Ganti Nama | Mengganti nama file yang ditentukan (fungsi statis). |
CFile::Seek | Memposisikan penunjuk file saat ini. |
CFile::SeekToBegin | Memposisikan penunjuk file saat ini di awal file. |
CFile::SeekToEnd | Memposisikan penunjuk file saat ini di akhir file. |
CFile::SetFilePath | Menyetel jalur file lengkap dari file terpilih. |
CFile::SetLength | Mengubah panjang file. |
CFile::SetStatus | Mengatur status file yang ditentukan (statis, fungsi virtual). |
CFile::UnlockRange | Membuka kunci rentang byte dalam file. |
CFile::Write | Menulis data (tidak dibuffer) dalam file ke posisi file saat ini. |
Operator Publik
Nama | Deskripsi |
---|---|
CFile::operator HANDLE | Handel ke CFile objek. |
Anggota Data Publik
Nama | Deskripsi |
---|---|
CFile::hFileNull | Menentukan apakah CFile objek memiliki handel yang valid. |
CFile::m_hFile | Biasanya berisi handel file sistem operasi. |
Anggota Data yang Dilindungi
Nama | Deskripsi |
---|---|
CFile::m_pTM | Penunjuk ke CAtlTransactionManager objek. |
Keterangan
Ini secara langsung menyediakan layanan input/output disk biner yang tidak dibuffer, dan secara tidak langsung mendukung file teks dan file memori melalui kelas turunannya. CFile
bekerja bersama dengan CArchive
kelas untuk mendukung serialisasi objek Kelas Microsoft Foundation.
Hubungan hierarki antara kelas ini dan kelas turunannya memungkinkan program Anda beroperasi pada semua objek file melalui antarmuka polimorfik CFile
. File memori, misalnya, berulah seperti file disk.
Gunakan CFile
dan kelas turunannya untuk I/O disk tujuan umum. Gunakan ofstream
atau kelas Microsoft iostream
lainnya untuk teks yang diformat yang dikirim ke file disk.
Biasanya, file disk dibuka secara otomatis pada CFile
konstruksi dan ditutup pada penghancuran. Fungsi anggota statis memungkinkan Anda untuk menginterogasi status file tanpa membuka file.
Untuk informasi selengkapnya tentang menggunakan CFile
, lihat artikel File di MFC dan Penanganan File di Referensi Pustaka Run-Time.
Hierarki Warisan
CFile
Persyaratan
Header: afx.h
CFile::Batalkan
Menutup file yang terkait dengan objek ini dan membuat file tidak tersedia untuk membaca atau menulis.
virtual void Abort();
Keterangan
Jika Anda belum menutup file sebelum menghancurkan objek, destruktor menutupnya untuk Anda.
Saat menangani pengecualian, CFile::Abort
berbeda dari CFile::Close
dengan dua cara penting. Pertama, Abort
fungsi tidak akan melemparkan pengecualian pada kegagalan, karena kegagalan diabaikan oleh Abort
. Kedua, Abort
tidak akan MENEGASKAN jika file belum dibuka, atau ditutup sebelumnya.
Jika Anda terbiasa new
mengalokasikan CFile
objek pada heap, maka Anda harus menghapusnya setelah menutup file. Abort
m_hFile
diatur ke CFile::hFileNull
.
Contoh
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
Membuat dan menginisialisasi CFile
objek.
CFile();
CFile(CAtlTransactionManager* pTM);
CFile(HANDLE hFile);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags);
CFile(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM);
Parameter
hFile
Menangani file untuk dilampirkan ke CFile
objek.
lpszFileName
Jalur relatif atau lengkap file untuk dilampirkan ke CFile
objek.
nOpenFlags
Kombinasi bitwise (OR) opsi akses file untuk file yang ditentukan. Lihat bagian Keterangan untuk opsi yang mungkin.
pTM
Penunjuk ke objek CAtlTransactionManager
Keterangan
Lima tabel berikut mencantumkan opsi yang mungkin untuk parameter nOpenFlags .
Pilih hanya salah satu opsi mode akses file berikut. Mode akses file default adalah CFile::modeRead
, yang baca saja.
Nilai | Deskripsi |
---|---|
CFile::modeRead |
Meminta akses baca saja. |
CFile::modeWrite |
Permintaan hanya menulis akses. |
CFile::modeReadWrite |
Permintaan akses baca dan tulis. |
Pilih salah satu opsi mode karakter berikut.
Nilai | Deskripsi |
---|---|
CFile::typeBinary |
Mengatur mode biner (hanya digunakan dalam kelas turunan). |
CFile::typeText |
Mengatur mode teks dengan pemrosesan khusus untuk pengangkutan pasangan umpan baris kembali (hanya digunakan dalam kelas turunan). |
CFile::typeUnicode |
Mengatur mode Unicode (hanya digunakan dalam kelas turunan). Teks ditulis ke file dalam format Unicode saat aplikasi dibangun dalam konfigurasi Unicode. Tidak ada BOM yang ditulis ke file. |
Pilih hanya salah satu opsi mode berbagi file berikut. Mode berbagi file default adalah CFile::shareExclusive
, yang eksklusif.
Nilai | Deskripsi |
---|---|
CFile::shareDenyNone |
Tidak ada batasan berbagi. |
CFile::shareDenyRead |
Menolak akses baca ke semua orang lain. |
CFile::shareDenyWrite |
Menolak akses tulis ke semua orang lain. |
CFile::shareExclusive |
Menolak akses baca dan tulis ke semua orang lain. |
Pilih yang pertama, atau keduanya, dari opsi mode pembuatan file berikut. Mode pembuatan default adalah CFile::modeNoTruncate
, yang terbuka yang sudah ada.
Nilai | Deskripsi |
---|---|
CFile::modeCreate |
Membuat file baru jika tidak ada file. Jika file sudah ada, file akan ditimpa dan awalnya diatur ke panjang nol. |
CFile::modeNoTruncate |
Membuat file baru jika tidak ada file; jika tidak, jika file sudah ada, file dilampirkan ke CFile objek . |
Pilih opsi penembolokan file berikut seperti yang dijelaskan. Secara default, sistem menggunakan skema penembolokan tujuan umum yang tidak tersedia sebagai opsi.
Nilai | Deskripsi |
---|---|
CFile::osNoBuffer |
Sistem tidak menggunakan cache perantara untuk file. Opsi ini membatalkan 2 opsi berikut. |
CFile::osRandomAccess |
Cache file dioptimalkan untuk akses acak. Jangan gunakan opsi ini dan opsi pemindaian berurutan. |
CFile::osSequentialScan |
Cache file dioptimalkan untuk akses berurutan. Jangan gunakan opsi ini dan opsi akses acak. |
CFile::osWriteThrough |
Operasi tulis dilakukan tanpa penundaan. |
Pilih opsi keamanan berikut untuk mencegah handel file diwariskan. Secara default, setiap proses anak baru dapat menggunakan handel file.
Nilai | Deskripsi |
---|---|
CFile::modeNoInherit |
Mencegah proses turunan menggunakan handel file. |
Konstruktor default menginisialisasi anggota tetapi tidak melampirkan file ke CFile
objek. Setelah menggunakan konstruktor ini, gunakan metode CFile::Open untuk membuka file dan melampirkannya ke CFile
objek.
Konstruktor dengan satu parameter menginisialisasi anggota dan melampirkan file yang ada ke CFile
objek.
Konstruktor dengan dua parameter menginisialisasi anggota dan mencoba membuka file yang ditentukan. Jika konstruktor ini berhasil membuka file yang ditentukan, file dilampirkan ke CFile
objek; jika tidak, konstruktor ini melempar penunjuk ke CInvalidArgException
objek. Untuk informasi selengkapnya tentang cara menangani pengecualian, lihat Pengecualian.
CFile
Jika objek berhasil membuka file yang ditentukan, objek akan menutup file ini secara otomatis ketika CFile
objek dihancurkan; jika tidak, Anda harus secara eksplisit menutup file setelah tidak lagi dilampirkan ke CFile
objek.
Contoh
Kode berikut menunjukkan cara menggunakan 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
Menutup file yang terkait dengan objek ini dan membuat file tidak tersedia untuk membaca atau menulis.
virtual void Close();
Keterangan
Jika Anda belum menutup file sebelum menghancurkan objek, destruktor menutupnya untuk Anda.
Jika Anda terbiasa new
mengalokasikan CFile
objek pada heap, maka Anda harus menghapusnya setelah menutup file. Close
m_hFile
diatur ke CFile::hFileNull
.
Contoh
Lihat contoh untuk CFile::CFile.
CFile::D uplikat
Membuat objek duplikat CFile
untuk file tertentu.
virtual CFile* Duplicate() const;
Tampilkan Nilai
Penunjuk ke objek duplikat CFile
.
Keterangan
Fungsi ini setara dengan fungsi _dup
run-time C .
CFile::Flush
Memaksa data apa pun yang tersisa dalam buffer file untuk ditulis ke file.
virtual void Flush();
Keterangan
Penggunaan Flush
tidak menjamin pembilasan CArchive
buffer. Jika Anda menggunakan arsip, hubungi CArchive::Flush terlebih dahulu.
Contoh
Lihat contoh untuk CFile::SetFilePath.
CFile::GetFileName
Panggil fungsi anggota ini untuk mengambil nama file tertentu.
virtual CString GetFileName() const;
Tampilkan Nilai
Nama file.
Keterangan
Misalnya, saat Anda memanggil GetFileName
untuk membuat pesan kepada pengguna tentang file c:\windows\write\myfile.wri
, nama file, myfile.wri
, dikembalikan.
Untuk mengembalikan seluruh jalur file, termasuk nama, panggil GetFilePath. Untuk mengembalikan judul file ( myfile
), panggil GetFileTitle.
Contoh
Fragmen kode ini membuka SISTEM. File INI di direktori WINDOWS Anda. Jika ditemukan, contoh akan mencetak nama dan jalur dan judul, seperti yang ditunjukkan di bawah Output:
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
Panggil fungsi anggota ini untuk mengambil jalur lengkap file tertentu.
virtual CString GetFilePath() const;
Tampilkan Nilai
Jalur lengkap file yang ditentukan.
Keterangan
Misalnya, saat Anda memanggil GetFilePath
untuk menghasilkan pesan kepada pengguna tentang file c:\windows\write\myfile.wri
, jalur file, c:\windows\write\myfile.wri
, dikembalikan.
Untuk mengembalikan nama file saja (myfile.wri
), panggil GetFileName. Untuk mengembalikan judul file (myfile
), panggil GetFileTitle.
Contoh
Lihat contoh untuk GetFileName.
CFile::GetFileTitle
Panggil fungsi anggota ini untuk mengambil judul file (nama tampilan) untuk file.
virtual CString GetFileTitle() const;
Tampilkan Nilai
Judul file yang mendasar.
Keterangan
Metode ini memanggil GetFileTitle untuk mengambil judul file. Jika berhasil, metode mengembalikan string yang akan digunakan sistem untuk menampilkan nama file kepada pengguna. Jika tidak, metode memanggil PathFindFileName untuk mengambil nama file (termasuk ekstensi file) dari file yang mendasar. Itu berarti ekstensi file tidak selalu disertakan dalam string judul file yang dikembalikan. Untuk informasi selengkapnya, lihat GetFileTitle dan PathFindFileName di Windows SDK.
Untuk mengembalikan seluruh jalur file, termasuk nama, panggil GetFilePath. Untuk mengembalikan nama file saja, panggil GetFileName.
Contoh
Lihat contoh untuk GetFileName.
CFile::GetLength
Mendapatkan panjang logis file saat ini dalam byte.
virtual ULONGLONG GetLength() const;
Tampilkan Nilai
Panjang file.
Contoh
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
Mendapatkan nilai penunjuk file saat ini, yang dapat digunakan dalam panggilan nanti ke Seek
.
virtual ULONGLONG GetPosition() const;
Tampilkan Nilai
Penunjuk file.
Contoh
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
Metode ini mengambil informasi status yang terkait dengan instans objek tertentu CFile
atau jalur file tertentu.
BOOL GetStatus(CFileStatus& rStatus) const;
static BOOL PASCAL GetStatus(
LPCTSTR lpszFileName,
CFileStatus& rStatus,
CAtlTransactionManager* pTM = NULL);
Parameter
rStatus
Referensi ke struktur yang disediakan CFileStatus
pengguna yang akan menerima informasi status. Struktur CFileStatus
memiliki bidang berikut:
CTime m_ctime
Tanggal dan waktu file dibuat.CTime m_mtime
Tanggal dan waktu file terakhir diubah.CTime m_atime
Tanggal dan waktu file terakhir diakses untuk dibaca.ULONGLONG m_size
Ukuran logis file dalam byte, seperti yang dilaporkan oleh perintah DIR.BYTE m_attribute
Byte atribut file.char m_szFullName[_MAX_PATH]
Nama file absolut dalam set karakter Windows.
lpszFileName
String dalam set karakter Windows yang merupakan jalur ke file yang diinginkan. Jalur dapat relatif atau absolut, atau dapat berisi nama jalur jaringan.
pTM
Penunjuk ke objek CAtlTransactionManager
Tampilkan Nilai
TRUE jika informasi status untuk file yang ditentukan berhasil diperoleh; jika tidak, FALSE.
Keterangan
Versi non-statis dari GetStatus
mengambil informasi status dari file terbuka yang terkait dengan objek yang diberikan CFile
. Versi GetStatus
statis mendapatkan status file dari jalur file tertentu tanpa benar-benar membuka file. Versi ini berguna untuk menguji keberadaan dan hak akses file.
Anggota m_attribute
CFileStatus
struktur mengacu pada set atribut file. Kelas CFile
menyediakan jenis enumerasi Atribut sehingga atribut file dapat ditentukan secara simbolis:
enum Attribute {
normal = 0x00,
readOnly = 0x01,
hidden = 0x02,
system = 0x04,
volume = 0x08,
directory = 0x10,
archive = 0x20
};
Contoh
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
Menentukan keberadaan handel file yang valid untuk objek.CFile
static AFX_DATA const HANDLE hFileNull;
Keterangan
Konstanta ini digunakan untuk menentukan apakah CFile
objek memiliki handel file yang valid.
Contoh berikut menunjukkan operasi ini:
if (myFile.m_hFile != CFile::hFileNull)
;//perform operations on the file
else
;//indicate the presence of an invalid handle
CFile::LockRange
Mengunci rentang byte dalam file terbuka, melemparkan pengecualian jika file sudah dikunci.
virtual void LockRange(
ULONGLONG dwPos,
ULONGLONG dwCount);
Parameter
dwPos
Offset byte dari awal rentang byte untuk dikunci.
dwCount
Jumlah byte dalam rentang yang akan dikunci.
Keterangan
Mengunci byte dalam file mencegah akses ke byte tersebut oleh proses lain. Anda dapat mengunci lebih dari satu wilayah file, tetapi tidak ada wilayah yang tumpang tindih yang diizinkan.
Saat Anda membuka kunci wilayah menggunakan UnlockRange
fungsi anggota, rentang byte harus sesuai persis dengan wilayah yang sebelumnya dikunci. Fungsi LockRange
tidak menggabungkan wilayah yang berdekatan. Jika dua wilayah terkunci berdekatan, Anda harus membuka kunci setiap wilayah secara terpisah.
Catatan
Fungsi ini tidak tersedia untuk CMemFile
kelas -turunan.
Contoh
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
Berisi handel file sistem operasi untuk file yang terbuka.
HANDLE m_hFile;
Keterangan
m_hFile
adalah variabel publik jenis UINT. Ini berisi CFile::hFileNull
, indikator file kosong independen sistem operasi, jika handel belum ditetapkan.
Penggunaan m_hFile
tidak disarankan, karena arti anggota tergantung pada kelas turunan. m_hFile
dijadikan anggota publik untuk kenyamanan dalam mendukung penggunaan kelas nonpolimorfik.
CFile::m_pTM
Penunjuk CAtlTransactionManager
ke objek.
CAtlTransactionManager* m_pTM;
Keterangan
CFile::Open
Kelebihan beban. Open
dirancang untuk digunakan dengan konstruktor default CFile
.
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CFileException* pError = NULL);
virtual BOOL Open(
LPCTSTR lpszFileName,
UINT nOpenFlags,
CAtlTransactionManager* pTM,
CFileException* pError = NULL);
Parameter
lpszFileName
String yang berisi jalur ke file yang diinginkan. Jalur bisa relatif, absolut, atau nama jaringan (UNC).
nOpenFlags
UINT yang menentukan mode berbagi dan akses file. Ini menentukan tindakan yang harus diambil saat membuka file. Anda dapat menggabungkan opsi dengan menggunakan operator bitwise-OR ( |
) . Diperlukan satu izin akses dan satu opsi berbagi; modeCreate
mode dan modeNoInherit
bersifat opsional. Lihat konstruktor CFile untuk daftar opsi mode.
pError
Penunjuk ke objek pengecualian file yang ada yang akan menerima status operasi yang gagal.
pTM
Penunjuk ke objek CAtlTransactionManager
Tampilkan Nilai
Bukan nol jika pembukaan berhasil; jika tidak, 0. Parameter pError bermakna hanya jika 0 dikembalikan.
Keterangan
Kedua Open
fungsi tersebut adalah metode "aman" untuk membuka file, di mana kegagalan adalah kondisi normal yang diharapkan.
CFile
Sementara konstruktor melemparkan pengecualian dalam kondisi kesalahan, Open
mengembalikan FALSE untuk kondisi kesalahan. Open
masih dapat menginisialisasi objek CFileException untuk menjelaskan kesalahan. Jika Anda tidak menyediakan parameter pError, atau jika Anda meneruskan NULL untuk pError, Open
mengembalikan FALSE dan tidak melemparkan CFileException
. Jika Anda meneruskan penunjuk ke CFileException
, dan Open
mengalami kesalahan, fungsi mengisinya dengan informasi yang menjelaskan kesalahan tersebut. Open
tidak melemparkan pengecualian dalam kedua kasus.
Tabel berikut ini menjelaskan kemungkinan hasil .Open
pError |
Terjadi kesalahan | Nilai hasil | Konten CFileException |
---|---|---|---|
NULL | No | BENAR | n/a |
ptr ke CFileException |
No | BENAR | Berubah |
NULL | Ya | SALAH | n/a |
ptr ke CFileException |
Ya | SALAH | diinisialisasi untuk menjelaskan kesalahan |
Contoh
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
Gunakan operator ini untuk meneruskan handel ke CFile
objek ke fungsi seperti ReadFileEx dan GetFileTime yang mengharapkan HANDLE
.
operator HANDLE() const;
CFile::Read
Membaca data ke dalam buffer dari file yang terkait dengan CFile
objek.
virtual UINT Read(
void* lpBuf,
UINT nCount);
Parameter
lpBuf
Penunjuk ke buffer yang disediakan pengguna yaitu menerima data yang dibaca dari file.
nCount
Jumlah maksimum byte yang akan dibaca dari file. Untuk file mode teks, pasangan umpan baris kembali pengangkutan dihitung sebagai karakter tunggal.
Tampilkan Nilai
Jumlah byte yang ditransfer ke buffer. Untuk semua CFile
kelas, nilai pengembalian mungkin kurang dari nCount jika akhir file tercapai.
Contoh
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)));
Untuk contoh lain, lihat CFile::Open.
CFile::Hapus
Fungsi statis ini menghapus file yang ditentukan oleh jalur.
static void PASCAL Remove(
LPCTSTR lpszFileName,
CAtlTransactionManager* pTM = NULL);
Parameter
lpszFileName
String yang merupakan jalur ke file yang diinginkan. Jalur dapat relatif atau absolut, dan dapat berisi nama jaringan.
pTM
Penunjuk ke objek CAtlTransactionManager
Keterangan
Remove
tidak akan menghapus direktori.
Fungsi Remove
anggota melemparkan pengecualian jika file yang terhubung terbuka atau jika file tidak dapat dihapus. Fungsi ini setara dengan perintah DEL.
Contoh
//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::Ganti Nama
Fungsi statis ini mengganti nama file yang ditentukan.
static void PASCAL Rename(
LPCTSTR lpszOldName,
LPCTSTR lpszNewName,
CAtlTransactionManager* pTM = NULL);
Parameter
lpszOldName
Jalur lama.
lpszNewName
Jalur baru.
pTM
Penunjuk ke objek CAtlTransactionManager
Keterangan
Direktori tidak dapat diganti namanya. Fungsi ini setara dengan perintah REN.
Contoh
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
Memposisikan ulang penunjuk file dalam file yang terbuka.
virtual ULONGLONG Seek(
LONGLONG lOff,
UINT nFrom);
Parameter
IOff
Jumlah byte untuk memindahkan penunjuk file. Nilai positif memindahkan penunjuk file ke akhir file; nilai negatif memindahkan penunjuk file ke awal file.
nDari
Posisi untuk mencari dari. Lihat bagian Keterangan untuk nilai yang mungkin.
Tampilkan Nilai
Posisi penunjuk file jika metode berhasil; jika tidak, nilai yang dikembalikan tidak terdefinisi dan penunjuk ke CFileException
pengecualian dilemparkan.
Keterangan
Tabel berikut mencantumkan nilai yang mungkin untuk parameter nFrom .
Nilai | Deskripsi |
---|---|
CFile::begin |
Cari dari awal file. |
CFile::current |
Cari dari lokasi penunjuk file saat ini. |
CFile::end |
Cari dari akhir file. |
Ketika file dibuka, penunjuk file diposisikan pada 0, awal file.
Anda dapat mengatur penunjuk file ke posisi di luar akhir file. Jika ya, ukuran file tidak meningkat hingga Anda menulis ke file.
Handler pengecualian untuk metode ini harus menghapus objek pengecualian setelah pengecualian diproses.
Contoh
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
Mengatur nilai penunjuk file ke awal file.
void SeekToBegin();
Keterangan
SeekToBegin()
setara dengan Seek( 0L, CFile::begin )
.
Contoh
CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();
CFile::SeekToEnd
Mengatur nilai penunjuk file ke akhir logis file.
ULONGLONG SeekToEnd();
Tampilkan Nilai
Panjang file dalam byte.
Keterangan
SeekToEnd()
setara dengan CFile::Seek( 0L, CFile::end )
.
Contoh
CFile f;
f.Open(_T("Seeker_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
f.SeekToBegin();
ULONGLONG ullEnd = f.SeekToEnd();
CFile::SetFilePath
Panggil fungsi ini untuk menentukan jalur file. Misalnya, jika jalur file tidak tersedia saat objek CFile dibangun, panggil SetFilePath
untuk menyediakannya.
virtual void SetFilePath(LPCTSTR lpszNewName);
Parameter
lpszNewName
Penunjuk ke string yang menentukan jalur baru.
Keterangan
Catatan
SetFilePath
tidak membuka file atau membuat file; itu hanya mengaitkan CFile
objek dengan nama jalur, yang kemudian dapat digunakan.
Contoh
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
Panggil fungsi ini untuk mengubah panjang file.
virtual void SetLength(ULONGLONG dwNewLen);
Parameter
dwNewLen
Panjang file yang diinginkan dalam byte. Nilai ini bisa lebih besar atau lebih kecil dari panjang file saat ini. File akan diperluas atau dipotong sebagaimana mewajibkan.
Keterangan
Catatan
Dengan CMemFile
, fungsi ini dapat melemparkan CMemoryException
objek.
Contoh
CFile cfile;
cfile.Open(_T("SetLength_File.dat"), CFile::modeCreate |
CFile::modeReadWrite);
ULONGLONG dwNewLength = 10000;
cfile.SetLength(dwNewLength);
CFile::SetStatus
Menyetel status file yang terkait dengan lokasi file ini.
static void PASCAL SetStatus(
LPCTSTR lpszFileName,
const CFileStatus& status,
CAtlTransactionManager* pTM = NULL);
Parameter
lpszFileName
String yang merupakan jalur ke file yang diinginkan. Jalur dapat relatif atau absolut, dan dapat berisi nama jaringan.
status
Buffer yang berisi informasi status baru. GetStatus
Panggil fungsi anggota untuk mengisi CFileStatus
struktur dengan nilai saat ini, lalu buat perubahan sesuai kebutuhan. Jika nilai adalah 0, maka item status yang sesuai tidak diperbarui. Lihat fungsi anggota GetStatus untuk deskripsi CFileStatus
struktur.
pTM
Penunjuk ke objek CAtlTransactionManager
Keterangan
Untuk mengatur waktu, ubah m_mtime
bidang status.
Ketika Anda melakukan panggilan ke SetStatus
dalam upaya untuk mengubah hanya atribut file, dan m_mtime
anggota struktur status file bukan nol, atribut juga dapat terpengaruh (mengubah stempel waktu mungkin memiliki efek samping pada atribut). Jika Anda hanya ingin mengubah atribut file, pertama-tama atur m_mtime
anggota struktur status file ke nol lalu lakukan panggilan ke SetStatus
.
Contoh
TCHAR* pFileName = _T("ReadOnly_File.dat");
CFileStatus status;
CFile::GetStatus(pFileName, status);
status.m_attribute |= CFile::readOnly;
CFile::SetStatus(pFileName, status);
CFile::UnlockRange
Membuka kunci rentang byte dalam file yang terbuka.
virtual void UnlockRange(
ULONGLONG dwPos,
ULONGLONG dwCount);
Parameter
dwPos
Offset byte dari awal rentang byte untuk membuka kunci.
dwCount
Jumlah byte dalam rentang yang akan dibuka kuncinya.
Keterangan
Lihat deskripsi fungsi anggota LockRange untuk detailnya.
Catatan
Fungsi ini tidak tersedia untuk CMemFile
kelas -turunan.
Contoh
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
Menulis data dari buffer ke file yang terkait dengan CFile
objek.
virtual void Write(
const void* lpBuf,
UINT nCount);
Parameter
lpBuf
Penunjuk ke buffer yang disediakan pengguna yang berisi data yang akan ditulis ke file.
nCount
Jumlah byte yang akan ditransfer dari buffer. Untuk file mode teks, pasangan umpan baris kembali pengangkutan dihitung sebagai karakter tunggal.
Keterangan
Write
memberikan pengecualian sebagai respons terhadap beberapa kondisi, termasuk kondisi penuh disk.
Contoh
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();
Lihat juga contoh untuk CFile::CFile dan CFile::Open.
Lihat juga
SAMPEL MFC DRAWCLI
Kelas CObject
Bagan Hierarki
Kelas CStdioFile
Kelas CMemFile