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

Add an extention to the file you want to save

本文关键字:添加 扩展名 文件 保存      更新时间:2023-10-16

问题是我在保存文件名时需要添加扩展名。像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] = '';
    ofn.nMaxFile = MAX_PATH;
    ofn.lpstrFilter = _T("All Files*.*Text files*.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());