Sto lavorando su un codice C++ che analizza il percorso e per questo ho sperimentato molte API Windows. C'è una differenza tra PathGetArgs
/PathRemoveArgs
e un CommandLineToArgvW
leggermente massaggiato?PathGetArgs/PathRemoveArgs vs. CommandLineToArgvW: c'è una differenza?
In altre parole, a parte la lunghezza/pulizia, è questo:
std::wstring StripFileArguments(std::wstring filePath)
{
WCHAR tempPath[MAX_PATH];
wcscpy(tempPath, filePath.c_str());
PathRemoveArgs(tempPath);
return tempPath;
}
diversa da questa:
std::wstring StripFileArguments(std::wstring filePath)
{
LPWSTR* argList;
int argCount;
std::wstring tempPath;
argList = CommandLineToArgvW(filePath.c_str(), &argCount);
if (argCount > 0)
{
tempPath = argList[0]; //ignore any elements after the first because those are args, not the base app
LocalFree(argList);
return tempPath;
}
return filePath;
}
ed è questo
std::wstring GetFileArguments(std::wstring filePath)
{
WCHAR tempArgs[MAX_PATH];
wcscpy(tempArgs, filePath.c_str());
wcscpy(tempArgs, PathGetArgs(tempArgs));
return tempArgs;
}
diverso da
std::wstring GetFileArguments(std::wstring filePath)
{
LPWSTR* argList;
int argCount;
std::wstring tempArgs;
argList = CommandLineToArgvW(filePath.c_str(), &argCount);
for (int counter = 1; counter < argCount; counter++) //ignore the first element (counter = 0) because that's the base app, not args
{
tempArgs = tempArgs + TEXT(" ") + argList[counter];
}
LocalFree(argList);
return tempArgs;
}
? Mi sembra come PathGetArgs
/PathRemoveArgs
solo fornire un'implementazione del caso speciale più semplice e pulita dell'analisi CommandLineToArgvW
, ma mi piacerebbe sapere se ci sono casi d'angolo in cui le API si comporteranno in modo diverso.
Sembra che le API SHLW ('Percorso *') non facciano nulla di speciale oltre a trovare il primo carattere di spazio. Questo è probabilmente il significato della documentazione su dove legge: * "Questa funzione non deve essere utilizzata su modelli di percorsi di comando generici." * La [euristica utilizzata da 'CommandLineToArgvW'] (http://blogs.msdn.com/b /oldnewthing/archive/2010/09/16/10062818.aspx) sembra essere [un po 'più coinvolto] (http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx). – IInspectable
+1 per i link The Old New Thing. – computerfreaker