파일 입력 코드

외울 코드는 아니고 필요할때마다 그냥 복붙하는게 답

CString m_strPath, str;

	CStdioFile rFile;

	CFileException ex;

	CFileDialog dlg(TRUE, _T("*.txt"), NULL, OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT, _T("TXT Files(*.txt)|*.txt|"), NULL);
    	CString getFileString; 

	if (dlg.DoModal() == IDOK)

	{

		m_strPath = dlg.GetPathName();

		rFile.Open(m_strPath, CFile::modeReadWrite | CFile::typeText, &ex);



		while (rFile.ReadString(str))

		{

			getFileString += (str + _T("\r\n"));

		}

		rFile.Close();

                // edit control에 txt파일 쓰기

		mFileView.SetWindowTextW(getFileString);

	}


 

 

ShellExecute 함수

1)txt 파일 열기

2)경로 열기

//txt 파일 열기
void CDbfReaderDlg::OnBnClickedBtnOpendata()
{
	if (openoutputDataPath == "")
	{
		MessageBox(_T("RUN 해주세요."));
		return;
	}
	//openoutputDataPath.Replace(L"\\", L"\\\\");
	// TODO: Add your control notification handler code here
	ShellExecute(NULL, _T("open"), _T("notepad"), openoutputDataPath, NULL, SW_SHOW);
	 

}


//폴더 열기 
void CDbfReaderDlg::OnBnClickedBtnOutpathopen()
{
	if (openoutputPath == "")
	{
		MessageBox(_T("RUN 해주세요."));
		return;
	}
	// TODO: Add your control notification handler code here
	
	
	// TODO: Add your control notification handler code here
	//ShellExecute(NULL, _T("open"), _T("notepad"), openinputPath, NULL, SW_SHOW);
	ShellExecute(NULL, _T("open"),  openoutputPath,NULL, NULL, SW_SHOW);
}

 

 

CFileFind란 Class를 사용하면 된다.

//해당경로에 폴더있는지 확인하는 것
CFileFind  cFileFinder;
bool temp=  cFileFinder.FindFile(_T("C:\\Users\\SW\\Desktop"));

 

 

 

 

다이얼로그는 크게 파일/폴더 탐색 두가지로 구분 되며 다음은 파일경로를 탐색하여 그 위치의 저장하는 코드이다. 

 

1) Edit Control 생성

2) 파일 경로 설정

 

3) 결과

 

4)코드

 

void CTEST_CREATEDlg::OnBnClickedButton1()
{
	//char szFilter[20]  ;
	CString szFilter = _T("txt file(*.txt)|*.txt; |ALL File(*.*(|*.*||");
	CFileDialog dlg(FALSE, _T(""), NULL, OFN_OVERWRITEPROMPT, szFilter);
	//CFileDialog dlg(FALSE, "bmp", "pcmon", OFN_OVERWRITEPROMPT, szFilter);
	// TODO: Add your control notification handler code here
	CString strFolder;
	CString strPath;
	CString strFileName;
	CString strFolderPath;
	if (IDOK == dlg.DoModal())
	{
		strFolder = dlg.GetFolderPath();
		strPath = dlg.GetPathName();
		strFileName = dlg.GetFileName();

		m_strFFolder.SetWindowTextW(strFolder);
		m_strFPath.SetWindowTextW(strPath);
		m_strFName.SetWindowTextW(strFileName); 
		
	} 
}

 

기존의 char 배열에 szFilter를 CString으로 구현 --> MFC에 더 효율적 (유니코드, 멀티바이트 등의 형식오류 최소화)

 

 

5) 추가 

1) 경로에서 파일이름을 제외하고 경로만 추출

2) 경로에서 파일이름만 추출하고 싶을때  또는 마지막 경로depth를 추출

CString re = strPath.Mid(0, strPath.ReverseFind('\\'));//파일경로 (마지막경로제외)
CString res = strPath.Mid(strPath.ReverseFind('\\')+1, strPath.GetLength());//마지막경로

 

폴더 경로 가져오는 코드 

m_DbfData.clear();
BROWSEINFO BrInfo;
TCHAR szBuffer[512];// 경로저장 버퍼 

::ZeroMemory(&BrInfo, sizeof(BROWSEINFO));
::ZeroMemory(szBuffer, 512);

BrInfo.hwndOwner = GetSafeHwnd();
BrInfo.lpszTitle = _T("파일이 저장될 폴더를 선택하세요");
BrInfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_RETURNONLYFSDIRS | TBIF_TEXT;
LPITEMIDLIST pItemIdList = ::SHBrowseForFolder(&BrInfo);
::SHGetPathFromIDList(pItemIdList, szBuffer);   

//path 경로 저장
CString inputPath =_T("");  
inputPath.Format(_T("%s"), szBuffer);

 

경로 옵션

BrInfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_RETURNONLYFSDIRS | TBIF_TEXT;

BIF_BROWSEFORCOMPUTER    : 네트워크의 컴퓨터만 선택가능

BIF_BROWSEFORPRINTER        : 프린터만 선택가능

BIF_BROWSEINCLUDEFILES      : 파일도 표시

BIF_DONTGOBELOWDOMAIN  : 네트워크의 컴퓨터를 표시하지 않는다

BIF_EDITBOX                      : 에디트 박스를 표시한다

BIF_RETURNFSANCESTORS     : 네트워크의 컴퓨터만 선택가능

BIF_RETURNONLYFSDIRS        : 폴더만 선택가능

BIF_STATUSTEXT                  : 스테이터스 텍스트를 표시한다

BIF_VALIDATE                     : 부정 입력시에, BFFM_VALIDATEFAILED 이벤트

 

 

ofstream os(Test.txt, ios::xxx);

 ios::app

Test.txt 파일이 이미 존재하면 내용을 보존하고 파일 끝에서부터 쓰여진다. 파일이 없다면 새로 만든다.

 ios::ate

..?

 ios::binary

 이진수 형태로 쓰거나 읽음

 ios::in

파일을 읽고 파일이 없으면 안됨.

 ios::out

덮어쓰기를 실행. 즉 이미 존재하면 내용을 지우고 작성

 

중복된 파일 존재 여부 체크

 

중복된 파일을 존재 여부를 체크하기 보다는 파일을 제일 처음 쓸 때는 이 전 내용을 전부 삭제하고 작성

이어서 쓸 때는 app을 이용하여 마지막부터 씀

 

 

+ Recent posts