c++ - 如何更改 C++ 中的 LPCTSTR 对象?

标签 c++ string visual-studio visual-c++ mfc

我必须更改一些旧的 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 开发人员,我不知道我的表现有多好)。

请指教。

最佳答案

LPCTSTRconst 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/

相关文章:

c - 不工作/使用自己的 Strncpy 函数

c# - 错误 "Xamarin.Android.Support.Design 27.0.2.1 is not compatible with monoandroid60"

c++ - 如何使用提取将不可复制元素从 std::set move 到 std::map?

c++ - QWebkit 显示本地网页

c++ - std::string 构造函数抛出 std::out_of_range 异常

python - 将字符串转换为字典的简单方法

string - 查找包含多个字符串的文件

c++ - boost::sandbox::odeint 安装

c++ - 如何使程序成为默认程序以在 Visual Studio C++ 中打开特定文件

c# - self 更新、下载、解压和替换 Exe