Bagikan melalui


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

CObject

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. Abortm_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. Closem_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 _duprun-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 CMemFilekelas -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 CMemFilekelas -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