c++フォルダパスを取得(ファイルではありませんよ...)およびプログラムの現在のパス


ファイルのパスといえば、まず「/」と「」を言わなければなりません.''は右スラッシュで、反スラッシュとも呼ばれ、一般的には「」が改行のように意味を表すために使われます.「C:UsersAdministrator」(直接入手可能なパスは、エクスプローラから入手可能)プログラムで文字列で「C:Users\Administrator」と書くことを表します.ここの「\」は、実はマシンの「」を表しています.私たちは文字で彼を表すので、「」を付けて変換します.「改行」は「」のように.また表示できないASCII文字などもあります.もちろん上のように「C:/Users/Administrator」;こちらは必ず「はい」/「ではなく」「よくこれを間違える人がいます」/「左スラッシュです.正スラッシュとも呼ばれます.つまり、プログラム内でファイルパスを文字列で表す場合は、エスケープ記号」\「反対の正スラッシュ」/「システム内の」を表す場合です.そうすれば、システムが探しているファイルを見つけることができます.
ファイルパスを言い終わったら、フォルダパスの取得方法について話しましょう.c++でファイルパスを取得するのは簡単で、直接ファイルダイアログボックスを使うことができます.フォルダのパスを取得しようとすると違うので、次は直接コードをつけましょう.
BROWSEINFO bi;  
	ZeroMemory(&bi, sizeof(BROWSEINFO));  
	bi.hwndOwner = m_hWnd;  
	bi.ulFlags   = BIF_RETURNONLYFSDIRS;  
	LPITEMIDLIST pidl = SHBrowseForFolder(&bi);  
	BOOL bRet = FALSE;  
	TCHAR szFolder[MAX_PATH*2];  
	szFolder[0] = _T('/0');  
	if (pidl)  
	{  
		if (SHGetPathFromIDList(pidl, szFolder))    
			bRet = TRUE;  
		IMalloc *pMalloc = NULL;  
		if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc)  
		{   
			pMalloc->Free(pidl);   
			pMalloc->Release();  
		}  
		m_sDataSavePath = szFolder;
		m_sDataSavePath.Replace("\\","/");
	}  

最後の一言「m_sDataSavePath.Replace("\\","/");「非常に重要なのは、取得した」「使用」/「置換することです.そうすれば、パスを別の変数に渡してもファイルに直接保存してもこのパスを読み取ることができます.そうしないと、間違いやすいです.機械から得られるのは「C:UsersAdministrator」ではなく、どのようにReplace(「\」、「/」)ではないかもしれません.??間違いなく、「代わり」「代わり」「最初に言ったように」「エスケープ文字しか使えない」「つまり機械がこれを見ていると彼は知っている」「置き換え」「置き換え」「直接Replace(「」、「/」)と書くと機械は認識できず、コンパイルは通過できないので、こちらは注意しなければなりません.
二、ファイルパスの接続
ファイルパスといえば、プログラムを書くときにファイルパスとファイル名をつなぎ合わせる必要がある場合があります.例えば、「test.jpg」という画像を「C:UsersAdministratorpic」フォルダに保存します.この時はつなぎに使います.例えばmfcの下(私はmfcを使っていますが、他は試したことがありません)Cstring img=「test.jpg」、Cstring file Path=「C:\Users\Administrator\pic」です.このファイル名は、cstring file=filePath+"\"+imgという簡単な文字列接合で得たいと思います.結局fileの値は「test.jpg」、つまり先のパスがなくなった!!!それからファイルPathと交換します.append(img);依然としてこのような結果が現れた.file Pathの値が「test.jpg」であることは明らかに間違っています.だから文字配列の接合strcat()を使うしかない.コードを付けましょう:
CString temStr;
		char tmpc1[255];
		char tmpc2[]="/myData.txt";
		strcpy(tmpc1,m_sDataSavePath);
		strcat(tmpc1,tmpc2);
		temStr.Format("%s",tmpc1);

これでやっとパスm_sDataSavePathとファイル名myData.txtは完全なファイル名に接続されます.最後に保存すればいいです.の
三、プログラムの現在のパス(すなわちexeファイルのパス)
CString    CClientApp::ReturnPath()  
   {   
   CString    sPath;   
   GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);   
   sPath.ReleaseBuffer    ();   
   int    nPos;   
   nPos=sPath.ReverseFind('\\');   
   sPath=sPath.Left(nPos);   
   return    sPath;   
   }

レベルが限られていますが、間違いがあれば指摘してください.ありがとうございます.