c++ - 为要保存的文件添加扩展名

标签 c++ winapi file-extension savefiledialog

问题是我保存的时候需要给文件名加上扩展名。 outfile.open(filename + ".txt") 之类的解决方案似乎不适用于我的情况。 这是我的代码:

SaveFileDialog* saveFileDialog1 = new SaveFileDialog();

int saveAs(const string& outFileName)
{
    string bufFile("C:\\Windows\\tmp.XXXXXX");
    string outFile(saveFileDialog1->NewFileName);
    string line;
    string val;
    ifstream buf_stream;
    ofstream out_stream;
    buf_stream.open(bufFile.c_str());
    out_stream.open(outFile.c_str());

    if (buf_stream)  
{
    while (!buf_stream.eof())
    {

        getline(buf_stream, line);
            buf_stream >> val;
            out_stream << val<<endl;
    }

}

buf_stream.close();
out_stream.close();
remove("C:\\Windows\\tmp.XXXXXX");

    return 0;
}

然后当我想保存结果时,我会尝试使用该构造:

case IDM_FILE_SAVE:
    {

        saveFileDialog1;
        saveFileDialog1->ShowDialog();
        saveFileDialog1->FilterIndex1 = 1;
        saveFileDialog1->Flags1 |= OFN_SHOWHELP;
        saveFileDialog1->InitialDir1 = _T("C:\\Windows\\");
        saveFileDialog1->Title1 = _T("Save File");

            int retval = saveAs(saveFileDialog1->NewFileName);
}

我尝试解决问题

SaveFileDialog::SaveFileDialog(void)

{
    this->DefaultExtension1 = 0;
    this->NewFileName = new TCHAR[MAX_PATH + TCHAR(".txt")];
    this->FilterIndex1 = 1;
    this->Flags1 = OFN_OVERWRITEPROMPT;
    this->InitialDir1 = 0;
    this->Owner1 = 0;
    this->Title1 = 0;
    this->RestoreDirectory = true;
}




     bool SaveFileDialog::ShowDialog()
    {
        OPENFILENAME ofn;

    TCHAR szFile[MAX_PATH] = "";
    ZeroMemory(&ofn, sizeof(ofn));

    ofn.lStructSize = sizeof(ofn);
    ofn.hwndOwner = this->Owner1;
    ofn.lpstrDefExt = this->DefaultExtension1;
    ofn.lpstrFile = this->NewFileName;
    ofn.lpstrFile[0] = '\0';
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFilter = _T("All Files\0*.*\0Text files\0*.txt");
    ofn.nFilterIndex = this->FilterIndex1;
    ofn.lpstrInitialDir = this->InitialDir1;
    ofn.lpstrTitle = this->Title1;
    ofn.Flags = this->Flags1;

    GetSaveFileName(&ofn);

    if (_tcslen(this->NewFileName) == 0) return false;

    return true;
}

任何建议将不胜感激。

最佳答案

使用 c++11(检查您的编译器标志?)fstream::open()函数与字符串完美配合。所以不需要通过c_str()。然后你可以使用 operator+按照您的意愿在字符串上:

buf_stream.open(bufFile);
out_stream.open(outFile);
...
outfile.open(filename + ".txt");

注意:如果文件名在声明时已知,您可以立即将文件名提供给流的构造函数。因此不需要调用单独的 open()

如果您不能使用 C++11,则使用临时字符串进行连接:

outfile.open (string(filename+".tst").c_str());   

关于c++ - 为要保存的文件添加扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28765145/

相关文章:

c++ - 如何隔离两个同名的C++类?

c++ - 在 Windows 中获取登录用户数

c# - 如何过滤具有特定扩展名的 Directory.EnumerateFiles

c# - 给定 FileStream 确定文件扩展名

c++ - GCC9 是否允许避免 std::variant 的无值状态?

c++ - Visual Studio 2010 中好的 C++ 主题的集合?

c++ - 如何知道从哪个DLL加载的方法

winapi - 如何使用 Windows API 重置 USB 设备?

c++ - Winapi shell 扩展覆盖 Windows 命令

JSON 文件扩展名