CFile
<- CMemFile
<- CSocketFile
<- CStdioFile
.Open() // _fdopen()
.Close() // fclose()
.Read() // fread()
.Write() // fwrite()
.ReadString() // _fgetts()
.WriteString() // _fputts()
.Seek() // fseek()
.GetPosition() // ftell()
.Flush() // fflush()
CInternetFile -> CStdioFile
.Close()
.Read()
.Write()
CFile
m_hFile
.GetFilePath()
.GetFileName()
.GetFileTitle()
.GetLength()
.Open()
CFile::modeRead - 읽기
CFile::modeWrite - 쓰기
CFile::modeReadWrite - 읽기/쓰기
CFile::modeCreate - 같은 이름의 파일이 이미 존재하더라도 새로운 파일을 생성
CFile::modeNoTruncate
CFile::shareExclusive - 파일에 대한 배타적인 액세스
CFile::shareDenyWrite
CFile::shareDenyRead
CFile::shareDenyNone
.Close()
.Read() - 파일로부터 지정한 수만큼의 바이트를 (파일 I/O )버퍼로 읽는다. 반환 값은 실제로 읽은 바이트의 수로 파일의 끝을 만나게 되면, 요구했던 수보다 작을 수도 있다.
.Write()
.GetPosition() - 파일의 처음부터 현재 위치(파일 포인터?)까지의 오프셋
.Seek() - 파일 포인터를 옮긴다.
CFile::begin
CFile::end
CFile::current
.SeekToBegin()
.SeekToEnd()
더보기 접기
void CFileDlg::OnBnClickedSave()
{
// TODO: Add your control notification handler code here
...
CFile file;
file.Open ("save.dat", CFile::modeCreate | CFile::modeWrite );
file.Write (m_sWord, m_sWord.GetLength());
// file.Close();
}
void CFileDlg::OnBnClickedLoad()
{
// TODO: Add your control notification handler code here
char buf[255];
ZeroMemory(buf, 255);
CFile file;
file.Open ("save.dat", CFile::modeRead );
file.Read (buf, 255);
...
// file.Close();
}
접기
CFileException
.Delete()
.ReportError()
m_cause
CFileException::fileNotFound
CFileException::toomanyOpenFiles
CFileException::hardIO
CFileException::sharingViolation
CFileException
::diskFull
CFileException
::endOfFile
CFile file;
CFileException e;
if (0 == file.Open(_T("File.txt"), CFile::modeReadWrite, &e)) {
e.ReportError();
return -1;
}
...
file.Close();
or
try {
CFile file(_T("File.txt"), CFile::modeReadWrite);
...
} catch (CFileException *e) {
e->ReportError();
e->Delete();
}
BYTE buffer[0x1000];
DWORD dwBytesRemaining = file.GetLength();
while (dwBytesRemaining) {
DWORD dwPosition = file.GetPosition();
UINT nBytesRead = file.Read(buffer, sizeof(buffer));
...
file.Seek(dwPosition, CFile::begin);
file.Write(buffer, nBytesRead);
dwBytesRemaining -= nBytesRead;
}
더보기 접기
BOOL CMyFtpView::DownLoad(CString strName, DWORD dSize)
{
int num=0;
num = (int)(dSize/512);
CString strClientDir, strFtpDir;
strClientDir = m_pClient->m_strPath;
m_pFtpConnection->GetCurrentDirectory(strFtpDir);
// 현재 경로에 "\\" 나 "//"를 붙여준다.
if(strClientDir.Right(1) != "\\")
strClientDir += "\\";
CFile ClientFile;
CInternetFile *pServerFile;
// 파일이 존재하면 지운뒤 새로 생성한다.
DeleteFile(strClientDir + strName);
BOOL b = ClientFile.Open(strClientDir + strName, CFile::modeCreate |CFile::modeWrite, NULL);
if(!b) // 파일 생성 실패
return FALSE;
// 서버에 있는 파일을 연다.
pServerFile = (CInternetFile*)m_pFtpConnection->OpenFile(strName, GENERIC_READ , NULL);
// 파일을 512 바이트씩 전송 한다.
UINT nByteRead = 512;
int k = 0;
char buffer[512];
while(nByteRead)
{
// 서버의 파일에서 읽은후
nByteRead = pServerFile->Read(buffer,512);
if(nByteRead)
{
// 클라이언트 파일에 쓴다.
ClientFile.Write( buffer, nByteRead);
}
}
pServerFile->Close();
delete pServerFile;
ClientFile.Close();
return TRUE;
}
BOOL CMyFtpView::UpLoad(CString strName, DWORD dSize)
{
int num=0;
num = (int)(dSize/512);
CString strClientDir, strFtpDir;
strClientDir = m_pClient->m_strPath;
m_pFtpConnection->GetCurrentDirectory(strFtpDir);
// 현재 경로에 "\\" 나 "//"를 붙여준다.
if(strClientDir.Right(1) != "\\")
strClientDir += "\\";
CFile ClientFile;
CInternetFile *pServerFile;
// 클라이언트 파일 열기
BOOL b = ClientFile.Open(strClientDir + strName, GENERIC_READ, NULL);
if(!b)
return FALSE;
// 파일이 존재하면 지운뒤 새로 생성한다.
m_pFtpConnection->Remove(strName);
pServerFile = (CInternetFile*)m_pFtpConnection->OpenFile(strName, GENERIC_WRITE , NULL);
if(!b)
return FALSE;
UINT nByteRead = 512;
int k = 0;
char buffer[512];
while(nByteRead)
{
nByteRead = ClientFile.Read(buffer,512);
if(nByteRead)
{
// 서버 파일에 쓴다.
pServerFile->Write( buffer, nByteRead);
}
}
pServerFile->Close();
delete pServerFile;
ClientFile.Close();
return TRUE;
}
접기
CString string;
CStdioFile file(_T("File.txt"), CFile::modeRead);
while (file.ReadString(string)
...
참조 사이트: