Вам необходимо создать полный URL-адрес в виде строки, прежде чем передать его второму аргументу функции.
Примерно так:
std::string url = "localhost:8080/test.php?username=";
url = url + UserNameBuffer + "&token=" + TokentBuf;
URLDownloadToFile(NULL, url.c_str() , "C:\\test.txt", 0, NULL);
Концепция параметров HTTP не имеет ничего общего с концепцией параметров функции для функции URLDownloadToFile.
К сожалению, для строки нет метода Truncate()
. Вам придется писать такую логику самостоятельно. Однако вы можете обернуть это в метод расширения, чтобы не дублировать его повсюду:
public static class StringExt
{
public static string Truncate(this string value, int maxLength)
{
if (string.IsNullOrEmpty(value)) return value;
return value.Length <= maxLength ? value : value.Substring(0, maxLength);
}
}
Теперь мы можем написать:
var someString = "...";
someString = someString.Truncate(2);
Мои два цента с длиной примера 30:
var truncatedInput = string.IsNullOrEmpty(input) ?
string.Empty :
input.Substring(0, Math.Min(input.Length, 30));
Вы можете использовать LINQ... он устраняет необходимость проверки длины строки. Возможно, не самый эффективный, но забавный.
string result = string.Join("", value.Take(maxLength)); // .NET 4 Join
or
string result = new string(value.Take(maxLength).ToArray());
В .net для этого ничего нет, насколько я знаю - вот моя версия, которая добавляет "...":
public static string truncateString(string originalString, int length) {
if (string.IsNullOrEmpty(originalString)) {
return originalString;
}
if (originalString.Length > length) {
return originalString.Substring(0, length) + "...";
}
else {
return originalString;
}
}
Или вместо тернарного оператора вы можете использовать Math.min
public static class StringExt
{
public static string Truncate( this string value, int maxLength )
{
if (string.IsNullOrEmpty(value)) { return value; }
return value.Substring(0, Math.Min(value.Length, maxLength));
}
}