C++ 如何将执行路径与文件路径和参数分离?

C++ 如何将执行路径与文件路径和参数分离?,c++,windows,winapi,registry,C++,Windows,Winapi,Registry,有这样几行 C:\Program Files\Realtek\Audio\HDA\RAVCpl64.exe -s 在注册表项中 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 现在我想将绝对路径和参数与直线分开 如果线路是 C:\Space Dir\Dot.Dir\Sample Name.Dot.exe param path."C:\Space Dir\Dot.Dir\Sample Name.Dot.exe"

有这样几行

C:\Program Files\Realtek\Audio\HDA\RAVCpl64.exe -s
在注册表项中

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
现在我想将绝对路径和参数与直线分开

如果线路是

C:\Space Dir\Dot.Dir\Sample Name.Dot.exe param path."C:\Space Dir\Dot.Dir\Sample Name.Dot.exe"

我应该使用哪个分隔符来处理这一行?是否有任何Windows API函数可以解决此问题?

您需要的函数位于可以在Windows中使用的标准C库中

char theDrive[5],thePath[MAX_PATH],theFilename[MAX_PATH],theExtension[MAX_PATH];

_splitpath(theSCTDataFilename,theDrive,thePath,theFilename,theExtension);
您还可以使用这样一个更通用的标记化函数,它接受任何字符串、char和CStringArray

void tokenizeString(CString theString, TCHAR theToken, CStringArray *theParameters)
{
CString temp = "";
int i = 0;

for(i = 0; i < theString.GetLength(); i++ ) 
    {                                   
    if (theString.GetAt(i) != theToken) 
       {
       temp += theString.GetAt(i);  
       }
     else
       {
       theParameters->Add(temp);    
       temp = "";
       }

         if(i == theString.GetLength()-1)
      theParameters->Add(temp);
    }
}

CStringArray thePathParts;
tokenizeString("your\complex\path\of\strings\separated\by\slashes",'/',&thePathParts);

这将为您提供一个包含输入字符串每个部分的CString CStringArray对象数组。只要知道要拆分字符串的分隔符,就可以使用此函数先解析主块,然后解析次块。

可以使用-破折号标记字符串?@TonyTheLion,但某些应用程序的参数以其他字符开头。您的意思是,您正试图编写代码来解析程序和参数从命令行?这不是很简单,因为在包含空格的路径中存在歧义。请参阅相关文档,特别是关于lpApplicationName参数的文档。据我所知,没有封装该逻辑的Windows API,因此您必须自己编写。第一条路径没有用双引号括起来。@Jay程序即将解析上面注册表项中的所有值。用引号括起来实际上使解析更容易,但我想知道注册表项中是否有这样一条未闭合的线。