我必须更改一些旧的 C++ 代码,而且我不熟悉该语言。
该代码使用 MFC 对象 CStdioFile 并调用 Open() 来处理文件。
CStdioFile::Open()
采用 LPCTSTR 参数来表示文件名,并且在像 _T("filename.txt")
这样的硬编码时一切正常。
但是现在我的任务是更改代码,以便我可以循环文件,或者将文件名作为命令行参数(但是这在 VC++ 项目中有效),我知道如何使用常规的旧版本来很好地做到这一点CStrings 和 char 数组,但是我收到了许多关于无法将 char* 或 string 转换为 LPCTSTR 的错误。
我想要一些类似的东西:
for( int i = 0; i < NUM_FILES; i++) {
if (m_file.Open(_T("sample00" + std::to_string(i) + ".txt"), CFile::modeCreate | CFile::modeWrite | CFile::shareDenyNone | CFile::typeText, NULL))
{
// Do something
{
}
我读过的关于解决与我类似但不等同的问题的文章充满了关于缺乏经验的开发人员弄乱 C++ 中的字符串的警告(作为一名 Python 开发人员,我不知道我的表现有多好)。
请指教。
最佳答案
LPCTSTR
是 const char *
或 const wchar *
的 typedef 名称,具体取决于您使用的是 Unicode 还是 MBCS/ASCII字符串。以现代风格执行此操作的最佳方法是首先构建字符串,然后使用 c_str() 转换为原始字符串。
for( int i = 0; i < NUM_FILES; i++)
{
std::string filename = "sample00" + std::to_string(i) + ".txt";
if (m_file.Open(filename.c_str(), CFile::modeCreate | CFile::modeWrite | CFile::shareDenyNone | CFile::typeText, NULL))
{
// Do something
}
}
关于c++ - 如何更改 C++ 中的 LPCTSTR 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58804032/