如何从C或C++代码中确定目录中的文件列表?
我不允许执行ls命令并从我的程序中解析结果.
string s = "????";
wstring ws = FUNCTION(s, ws);
Run Code Online (Sandbox Code Playgroud)
我如何将s的内容分配给ws?
搜索谷歌并使用了一些技术,但他们无法分配确切的内容.内容失真.
我知道之前已经问过这个问题,但我还没有看到一个令人满意的答案,或者一个明确的"不,这不可能完成",所以我再问一次!
我想做的就是以独立于平台的方式获取当前运行的可执行文件的路径,作为绝对路径或相对于调用可执行文件的位置.我虽然boost :: filesystem :: initial_path是我的麻烦的答案,但似乎只处理问题的'平台无关'部分 - 它仍然返回调用应用程序的路径.
对于一些背景,这是一个使用Ogre的游戏,我试图使用Very Sleepy进行配置,它从自己的目录运行目标可执行文件,所以当然在加载时游戏找不到配置文件等,并立即崩溃.我希望能够将它传递给配置文件的绝对路径,我知道配置文件将始终与可执行文件一起存在.在Visual Studio中进行调试也是如此 - 我希望能够运行$(TargetPath)而无需设置工作目录.
一点前景:我的任务需要将UTF-8 XML文件转换为UTF-16(当然还有正确的标题).所以我搜索了将UTF-8转换为UTF-16的常用方法,并发现应该使用来自的模板<codecvt>.
但现在当它被弃用时,我想知道执行相同任务的新常用方法是什么?
(根本不介意使用Boost,但除此之外我更喜欢尽可能靠近标准库.)
如何将TCHAR数组转换为std::string(不是std::basic_string)?
我正在研究基于锌的闪存应用程序的原生扩展,我需要将a转换const char*为a wstring.
这是我的代码:
mdmVariant_t* appendHexDataToFile(const zinc4CallInfo_t *pCallInfo, int paramCount, mdmVariant_t **params) {
if(paramCount >= 2) {
const char *file = mdmVariantGetString(params[0]);
const char *data = mdmVariantGetString(params[1]);
return mdmVariantNewInt(native.AppendHexDataToFile(file, data));
}
else {
return mdmVariantNewBoolean(FALSE);
}
}
Run Code Online (Sandbox Code Playgroud)
但native.AppendHexDataToFile()需要两个wstring.我对C++并不是很擅长,我认为所有这些不同的字符串类型都令人困惑,我在网上找不到有用的东西.所以我问你们这是怎么做的.
编辑:字符串是UTF-8,我使用的是OSX和Windows XP/Vista/7
我找了一下上一个转换的最佳方法的建议std::wstring,以std::string-但一个快速和肮脏的转换用作一个关键std::map<std::string, int>对象.
地图非常大,并且已经很好地集成到项目中,并且只有少数键需要这种转换,因此我认为将地图更改为接受std::wstring键的地图将是浪费.
转换的输出并不重要,但必须保持一致,以便每次都可靠地从地图中提取正确的值.
该应用程序是仅限Windows的应用程序.
是否有任何已知的过程可靠地为此目的进行粗略转换?或者最好的方法是通过通常的,正确的转换过程(如本问题/答案中所述:如何将wstring转换为字符串?)?
编辑:请记住 - 只要事情一致,丢失的信息就可以了.即如果我投入一些日文字符,并且它们一直转换成相同的(可能是垃圾)std::string,那很好.这永远不会用于显示,只能用作从地图中提取值的键.
谢谢!
看完后是<codecvt>不是一个标准的头?我不知道该怎么做,因为我的Windows版本的代码库用于<codecvt>在宽字符串和字符串之间进行转换.我目前使用GCC 4.7 for Linux版本的代码.难道<codecvt>还缺少最新的GCC?什么是解决方法?
wstring ws = L"hello";
string ns(ws.begin(), ws.end());
Run Code Online (Sandbox Code Playgroud) std::regex regexpy("y:(.+?)\"");
std::smatch my;
regex_search(value.text, my, regexpy);
y = my[1];
std::wstring wide_string = std::wstring(y.begin(), y.end());
const wchar_t* p_my_string = wide_string.c_str();
wchar_t* my_string = const_cast<wchar_t*>(p_my_string);
URLDownloadToFile(my_string, aDest);
Run Code Online (Sandbox Code Playgroud)
我正在使用Unicode,源字符串的编码是ASCII, UrlDownloadToFile扩展到UrlDownloadToFileW (wchar_t*)上面的代码在调试模式下编译,但有很多警告,如:
warning C4244: 'argument': conversion from 'wchar_t' to 'const _Elem', possible loss of data
Run Code Online (Sandbox Code Playgroud)
那么我想问一下,如何将 a 转换std::string为 a wchar_t?
我需要继承的异常类runtime_class来接受wstring&。这是MyExceptions.h:
using namespace std;
class myExceptions : public runtime_error
{
public:
myExceptions(const string &msg ) : runtime_error(msg){};
~myExceptions() throw(){};
};
Run Code Online (Sandbox Code Playgroud)
我愿意这样myExceptions接受: 。但是当我运行它时,我收到了这个错误:wstring&myExceptions(const **wstring** &msg )
C2664: 'std::runtime_error(const std__string &): cannot convert parameter 1 from 'const std::wstring' to 'const std::string &'
Run Code Online (Sandbox Code Playgroud)
我了解runtime_error接受string&而不是wstring&按照C++ 参考 - runtime_error中的定义:
> explicit runtime_error (const string& what_arg);
Run Code Online (Sandbox Code Playgroud)
我如何使用wstring&with runtime_error?