MFC書き込みパスの問題

3158 ワード

     
	IDR_MAINFRAME_256       BITMAP                  "C:\\Users\\Administrator\\Desktop\\    C++\\     \\test2_finish\\test2\\res\\Toolbar256.bmp"
     
IDR_MAINFRAME_256       BITMAP                  "res\\Toolbar256.bmp"

相対パスではresは現在のプロジェクトのピクチャが存在するフォルダを表す上位レベルであり、resというフォルダはリソースマネージャが存在するフォルダの名前である.
    

imgSrc=imread("./適応/1.jpg");imread関数では、1つのポイントが現在のフォルダディレクトリを省略し、2つのポイントが前のフォルダディレクトリに戻ることを表します.
"\\"  Windows      。
"//" Linux      
//         ,      HTTP://         ,//       +  +//  , FTP:// MMS://  。
\\                ,          IP     ,         。
 WINDOWS       / \      ,                    ,        。  ,            /,  C:/WINDOWS 。
\   WINDOWS     。
/     ,      /dir ,         
\     , 
, \、“、% , \\、\" , 。 "./" , "../" , 。

C++の相対パスと絶対パス、およびスラッシュとスラッシュの違い-Guo_guo-CSDNブログでは、「C:WindowsSystem」、つまり2つの反スラッシュでパスを区切るパスの書き方を見ることがあります.この書き方は、ネットアプリケーションやプログラミングでよく見られますが、実際には、上のパスは「C:/Windows/system」で代用でき、間違いはありません.しかし、「C:WindowsSystem」と書くと、いろいろと変なエラーが発生する可能性があります.上記の問題の原因については,文字列解析の面から分析する.プログラミングを学んだ人なら誰でも知っているはずですが、Cで文字列を出力するとき、改行を出力するには「」というマークを付けなければなりません.似たように、TABを出力するには「t」を付けます.つまり、反スラッシュ(「」)という記号は、その後ろに付いている文字を結合して他の文字に変換します.この原理によれば、二重引用符('"’)を出力するには、'''を入力する必要があります.これにより、二重引用符を含む文字列がメモリに正しく書き込まれます.では、反スラッシュを入力したい場合は?簡単です.叩くだけでいいです.「C:WindowsSystem」というパス文字列がCコンパイラに渡されてコンパイルされると、実際にメモリに書き込まれた文字列には反スラッシュ「」が含まれておらず、反スラッシュの後ろに続く文字も一緒に他の文字に変換され、再び呼び出されると問題になるかもしれません.
            ,     /\              ,        、          。                   。

しかし、現在VC 2013で使用されている場合、フォルダ区切り記号を表す役割がありますが、他の場合は分かりません.
#define BASE_ASSERT(bf) \
{ \
if(!(bf)) \
{ \
printf("Assert failed at line %d of file %s
", \ __LINE__,THIS_FILE); \ exit(0); \ } \ } C++ \ , , , , 。 2

5

CString GetSysPath(void) { TCHAR exeFullPath[MAX_PATH]; GetModuleFileName(NULL,exeFullPath, MAX_PATH); CString szfolder = exeFullPath; int pos = szfolder.ReverseFind(’\’); szfolder = szfolder.Left(pos+1); return szfolder; } CString szFile=GetSysPath();
2.    _tcslen()  :

関数機能:文字列の長さを取得します.例:CString strFilename=T(“c:\user\you\test.doc”); SIZE_T nLen = _tcslen(strFilename);//nLen = 20
    

void _splitpath( const char *path, char drive, char dir, char * fname, char * ext ); この関数を呼び出すと、driverはファイルがあるディスク(C:)、dirはファイルのディレクトリ(samplecrt、ここにはディスクがありません)、fnameはファイルのファイル名(makepath、前のパスがありません)、extはファイルの拡張子(.c、小数点付き)を指します.これで私たちはこのファイルの基本的な情報を得ることができます.もちろんこれらの組み合わせで関連ファイルのファイル名の情報を得ることができます.たとえばファイルのフルネームを得るとstrcpy(...)でfnameとextを組み合わせることができます.必要なヘッダファイルは、char ch[100];memcpy(ch, m_strPicPath, m_strPicPath.GetLength()); char drive[MAX_PATH], dir[MAX_PATH], title[MAX_PATH], ext[MAX_PATH]; _splitpath(m_strPicPath, drive, dir, title, ext); strcat(drive, dir); strcat(title, ext);//ファイル名titleとファイル拡張子extをtitleにマージ