기술 비망록의 7
VC에서 파일 읽기와 쓰기
오늘 몇 시간 동안 파일의 봉인 클래스인 CFileUtils를 써서 다중 디렉터리를 만들 수 있습니다.ini 파일의 읽기와 쓰기 및 기타 파일의 읽기와 쓰기, 빨리 코드를 붙여서 잊어버리지 않도록 하세요
헤더 파일 FileUtils.h
// FileUtils.h: interface for the CFileUtils class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_FILEUTILS_H__91C8D3E0_39CD_449F_878B_BC7DEBF8D74B__INCLUDED_)
#define AFX_FILEUTILS_H__91C8D3E0_39CD_449F_878B_BC7DEBF8D74B__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
const CString CONFIGFILEDIR = "config";
const CString DATAFILEDIR = "data";
const CString CONFIGFILETYPE = ".ini";
const CString DATAFILETYPE = ".dat";
const CString CONFIGFILENAME = "System";
const CString CONFIG_SECTION_SYSBASE = "SysBase";
const CString CONFIG_SECTION_MERGER = "Merger";
class CFileUtils
{
public:
CFileUtils();
virtual ~CFileUtils();
//common
//
void Split(CString str, CStringList & strList, const CString & divideCode, const CString & notIncCode);
//
BOOL FolderExists(LPCSTR lpPathName);
//
BOOL CreateDir(LPCSTR lpPathName);
//config
BOOL WriteConfigfileInt(LPCSTR lpAppName, LPCSTR lpKeyName, INT lpInt, LPCSTR lpFileName);
UINT GetConfigfileInt(LPCSTR lpAppName, LPCSTR lpKeyName, INT nDefault, LPCSTR lpFileName);
BOOL WriteConfigfileString(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpString, LPCSTR lpFileName);
DWORD GetConfigfileString(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName);
//data
BOOL WriteDatafile(LPCSTR lpFileName);
BOOL ReadDatafile(LPCSTR lpFileName);
BOOL WriteDatafileData(LPVOID lpData, UINT dataSize);
BOOL ReadDatafileData(LPVOID lpData,UINT dataSize);
void CloseDatafile();
private:
//common
CString m_currentDirectory;
//config
//data
CFile * m_DATA_file;
CArchive * m_DATA_archive;
};
#endif // !defined(AFX_FILEUTILS_H__91C8D3E0_39CD_449F_878B_BC7DEBF8D74B__INCLUDED_)
FileUtils.cpp
// FileUtils.cpp: implementation of the CFileUtils class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FileUtils.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFileUtils::CFileUtils()
{
char strBuff[256];
m_currentDirectory = GetCurrentDirectory(256,strBuff); //
m_currentDirectory.Format("%s",strBuff);
m_DATA_archive = NULL;
m_DATA_file = NULL;
}
CFileUtils::~CFileUtils()
{
CloseDatafile();
}
BOOL CFileUtils::WriteConfigfileInt( LPCSTR lpAppName, LPCSTR lpKeyName, INT lpInt, LPCSTR lpFileName )
{
CreateDir(lpFileName);
CString lpString;
lpString.Format("%d",lpInt);
CString sFileName = m_currentDirectory + lpFileName;
return ::WritePrivateProfileString(lpAppName,lpKeyName,lpString,sFileName); // ini
}
UINT CFileUtils::GetConfigfileInt( LPCSTR lpAppName, LPCSTR lpKeyName, INT nDefault, LPCSTR lpFileName )
{
CString sFileName = m_currentDirectory + lpFileName;
return ::GetPrivateProfileInt(lpAppName,lpKeyName,nDefault,sFileName);
}
BOOL CFileUtils::WriteConfigfileString( LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpString, LPCSTR lpFileName )
{
CString sFileName = m_currentDirectory + lpFileName;
return ::WritePrivateProfileString(lpAppName,lpKeyName,lpString,sFileName);
}
DWORD CFileUtils::GetConfigfileString(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName)
{
CString sFileName = m_currentDirectory + lpFileName;
return ::GetPrivateProfileString(lpAppName,lpKeyName,lpDefault,lpReturnedString,nSize,sFileName);
}
BOOL CFileUtils::WriteDatafile( LPCSTR lpFileName )
{
CreateDir(lpFileName);
CString sFileName = m_currentDirectory + lpFileName;
m_DATA_file = new CFile(sFileName,CFile::modeCreate | CFile::modeWrite);
m_DATA_archive = new CArchive(m_DATA_file,CArchive::store);
return TRUE;
}
BOOL CFileUtils::ReadDatafile( LPCSTR lpFileName )
{
CString sFileName = m_currentDirectory + lpFileName;
m_DATA_file = new CFile(sFileName,CFile::modeRead);
m_DATA_archive = new CArchive(m_DATA_file,CArchive::load);
return TRUE;
}
BOOL CFileUtils::WriteDatafileData( LPVOID lpData, UINT dataSize)
{
m_DATA_archive->Write(lpData,dataSize);
m_DATA_archive->Flush();
return TRUE;
}
BOOL CFileUtils::ReadDatafileData( LPVOID lpData, UINT dataSize )
{
m_DATA_archive->Read(lpData,dataSize);
return TRUE;
}
void CFileUtils::CloseDatafile()
{
if(m_DATA_archive)
{
m_DATA_archive->Flush();
m_DATA_archive->Close();
m_DATA_file->Close();
delete m_DATA_archive;
delete m_DATA_file;
m_DATA_archive = NULL;
m_DATA_file = NULL;
}
}
BOOL CFileUtils::CreateDir( LPCSTR lpPathName )
{
CStringList sDirNameList;
CString sSeparator = "\\";
CString notIncCode = ".";
CString sDirName;
CString sPathName;
BOOL bNeedJudge = TRUE;
Split(lpPathName,sDirNameList,sSeparator,notIncCode);
if (!sDirNameList.IsEmpty())
{
sPathName = m_currentDirectory;
POSITION pos = sDirNameList.GetHeadPosition();
while(pos != NULL)
{
sDirName = sDirNameList.GetNext(pos);
sPathName += sSeparator + sDirName;
if (bNeedJudge)
{
if (FolderExists(sPathName))
{
continue;
}
bNeedJudge = FALSE;
}
CreateDirectory(sPathName,NULL);
}
return TRUE;
}
return FALSE;
}
BOOL CFileUtils::FolderExists( LPCSTR lpPathName )
{
DWORD attr;
attr = GetFileAttributes(lpPathName);
return (attr != (DWORD)(-1) ) && (attr & FILE_ATTRIBUTE_DIRECTORY);
}
void CFileUtils::Split(CString str, CStringList & strList, const CString & divideCode, const CString & notIncCode)
{
CString strValue;
strList.RemoveAll();
while (true)
{
strValue = str.SpanExcluding(divideCode);
if ((strValue != "") && (strValue.Find(notIncCode) == -1))
{
strList.AddTail(strValue);
}
str = str.Right(str.GetLength() - strValue.GetLength() - 1);
if (str.IsEmpty())
break;
}
}
호출 예:
CFileUtils * pFileUtils = new CFileUtils;
CString str;
int iInt;
CString sFileName;
char strBuff[256];
sFileName = "\\" + CONFIGFILEDIR + "\\" + CONFIGFILENAME + CONFIGFILETYPE;
pFileUtils->WriteConfigfileString("Section","Item1","testString",sFileName);
pFileUtils->WriteConfigfileInt("Section","Item2",1,sFileName);
pFileUtils->GetConfigfileString("Section","Item1",NULL,strBuff,100,sFileName);
MessageBox(strBuff);//
iInt = pFileUtils->GetConfigfileInt("Section","Item2",0,sFileName);
str.Format("%d",iInt);
MessageBox(str);//
int i=333;
float f=1.3333f;
char ch='v';
int i1;
float f1;
char ch1;
sFileName = "\\" + DATAFILEDIR + "\\" + "test" + DATAFILETYPE;
pFileUtils->WriteDatafile(sFileName);
pFileUtils->WriteDatafileData(&i,sizeof(int));
pFileUtils->WriteDatafileData(&f,sizeof(float));
pFileUtils->WriteDatafileData(&ch,sizeof(char));
pFileUtils->CloseDatafile(); //
pFileUtils->ReadDatafile(sFileName);
pFileUtils->ReadDatafileData(&i1,sizeof(int));
pFileUtils->ReadDatafileData(&f1,sizeof(float));
pFileUtils->ReadDatafileData(&ch1,sizeof(char));
pFileUtils->CloseDatafile();
str.Format("%d,%f,%c",i1,f1,ch1);//
MessageBox(str);//
delete pFileUtils;
참고:
CArchive와 CFile은 귀속되어 있습니다. 만약에 CFile 대상이 석방되면 상응하는 CArchive 대상도 방출됩니다. 다시 귀속을 신청해야 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
F#에서 Android 앱 개발 Helloworld 편F#에서 android 앱 개발의 기본이되는 Helloworld를 출력하는 방법을 소개합니다. 먼저 Visual Studio 2019를 시작합니다. [새 프로젝트 만들기(N)]→[빈 앱(Android)]을 선택합니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.