SHGetFolderPathW 不适用于日本用户名
SHGetFolderPathW not working with japanese username
我正在尝试使用 SHGetFolderPathW 函数在 %APPDATA% 中创建一个文件。我猜这个函数是在 unicode 中获取字符。我正在处理 Visual Studio 2010 年的小项目。以下代码适用于英文版的 win 8 但不适用于日文版(用户名是日文):
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <windows.h>
#include <Shlobj.h>
#include <tchar.h>
#include <string>
int _tmain(int argc, _TCHAR* argv[])
{
std::wstring output = L"";
WCHAR* folder = new WCHAR[2048];
SHGetFolderPathW(NULL, CSIDL_APPDATA,
NULL, SHGFP_TYPE_CURRENT, folder
);
std::wstring str1 = folder;
str1 += L"\hola.txt";
std::wcout << str1 << std::endl;
std::string str(str1.begin(), str1.end());
std::cout << str << std::endl;
// Create file in folder
FILE * file;
char *path = new char[str.length()+1];
strcpy(path, str.c_str());
file = fopen (path, "w");
fputs ("Hello World",file);
fclose (file);
system("PAUSE");
return 0;
}
代码在英文版中显示了正确的路径,但在日文中,此路径不正确。我想知道我是否有办法在所有语言中使用 SHGetFolderPath。我在谷歌上搜索了两天,但没有找到解决方案。
如果您有宽字符串文件路径,请使用 fopen
的宽字符串版本。这应该有效:
#include <string>
#include <stdio.h>
#include <Shlobj.h>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
WCHAR folder[MAX_PATH];
SHGetFolderPathW(NULL, CSIDL_APPDATA,
NULL, SHGFP_TYPE_CURRENT, folder
);
std::wstring str1 = folder;
str1 += L"\hola.txt";
// Create file in folder
FILE * file;
file = _wfopen (str1.c_str(), L"w");
fputs ("Hello World",file);
fclose (file);
return 0;
}
我正在尝试使用 SHGetFolderPathW 函数在 %APPDATA% 中创建一个文件。我猜这个函数是在 unicode 中获取字符。我正在处理 Visual Studio 2010 年的小项目。以下代码适用于英文版的 win 8 但不适用于日文版(用户名是日文):
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <windows.h>
#include <Shlobj.h>
#include <tchar.h>
#include <string>
int _tmain(int argc, _TCHAR* argv[])
{
std::wstring output = L"";
WCHAR* folder = new WCHAR[2048];
SHGetFolderPathW(NULL, CSIDL_APPDATA,
NULL, SHGFP_TYPE_CURRENT, folder
);
std::wstring str1 = folder;
str1 += L"\hola.txt";
std::wcout << str1 << std::endl;
std::string str(str1.begin(), str1.end());
std::cout << str << std::endl;
// Create file in folder
FILE * file;
char *path = new char[str.length()+1];
strcpy(path, str.c_str());
file = fopen (path, "w");
fputs ("Hello World",file);
fclose (file);
system("PAUSE");
return 0;
}
代码在英文版中显示了正确的路径,但在日文中,此路径不正确。我想知道我是否有办法在所有语言中使用 SHGetFolderPath。我在谷歌上搜索了两天,但没有找到解决方案。
如果您有宽字符串文件路径,请使用 fopen
的宽字符串版本。这应该有效:
#include <string>
#include <stdio.h>
#include <Shlobj.h>
#include <tchar.h>
int _tmain(int argc, _TCHAR* argv[])
{
WCHAR folder[MAX_PATH];
SHGetFolderPathW(NULL, CSIDL_APPDATA,
NULL, SHGFP_TYPE_CURRENT, folder
);
std::wstring str1 = folder;
str1 += L"\hola.txt";
// Create file in folder
FILE * file;
file = _wfopen (str1.c_str(), L"w");
fputs ("Hello World",file);
fclose (file);
return 0;
}