vs2015 mfc另存为

img


有人知道利用另存为怎么写吗?就是一个文件点击另存为按钮弹出窗口,选择存储的地方
一个文件存储到另一个地方,不是新建,我总是新建一个空文档

你是要存储你的代码,还是代码运行后要打开文件存储数据?

“Devil组”引证GPT后的撰写:
下面是一个示例代码,演示如何使用MFC的CFileDialog类和CStdioFile类实现另存为操作:

void CMyDlg::OnBtnSaveAs()
{
    // 构造文件对话框,用于选择文件路径和文件名
    CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), this);
    if (dlg.DoModal() == IDOK) // 显示文件对话框,如果用户点击了保存按钮,则继续
    {
        CString strFilePath = dlg.GetPathName(); // 获取文件路径和文件名
        CStdioFile file;
        if (file.Open(strFilePath, CStdioFile::modeCreate | CStdioFile::modeWrite)) // 打开文件,如果成功,则继续
        {
            CString strText = _T("Hello, World!"); // 假设您要保存的文本内容是 "Hello, World!"
            file.WriteString(strText); // 将文本内容写入文件
            file.Close(); // 关闭文件
        }
    }
}


参考GPT和自己的思路:你可以使用 MFC 库中的 CFileDialog 类来实现另存为功能,这个类提供了一个标准的文件对话框来选择文件名和位置。

下面是一个示例代码,它使用 CFileDialog 类来实现另存为功能。假设你的 MFC 应用程序有一个菜单项 "File -> Save As",当用户点击该菜单项时,就会调用以下代码:

void CMyApp::OnFileSaveAs()
{
    // 构造一个 CFileDialog 对象
    CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 
        _T("All Files (*.*)|*.*||"), NULL);

    // 显示文件对话框,如果用户点击 OK 按钮,则返回 IDOK
    if (dlg.DoModal() == IDOK)
    {
        // 获取用户选择的文件名和路径
        CString strFilePath = dlg.GetPathName();

        // 保存文件到用户选择的位置
        SaveFileAs(strFilePath);
    }
}

void CMyApp::SaveFileAs(LPCTSTR lpszFilePath)
{
    // 在此处实现保存文件的代码
}

在这个示例代码中,CFileDialog 构造函数的第一个参数是 FALSE,表示选择文件时显示另存为对话框,第二个参数和第三个参数分别指定默认的文件名和文件类型,第四个参数指定对话框的样式,第五个参数指定文件类型过滤器。

在 OnFileSaveAs 函数中,dlg.DoModal() 方法显示文件对话框并等待用户交互,如果用户点击 OK 按钮,则 dlg.GetPathName() 方法返回用户选择的文件名和路径。然后,你可以调用自定义函数 SaveFileAs 来将文件保存到用户选择的位置。

在 SaveFileAs 函数中,你可以编写将文件保存到所选位置的代码。

如果您想在VS2015 MFC应用程序中实现“另存为”功能,可以按照以下步骤进行操作:

在您的MFC应用程序中创建一个新的“另存为”对话框。

当用户单击"另存为"菜单项或工具栏按钮时,调用对话框并显示它。

在对话框中,使用控件(例如文本框、组合框等)允许用户选择要保存文件的位置和名称。

一旦用户确认要保存文件,您可以使用CFile类打开文件并将其写入磁盘。

以下是一些代码示例,可以帮助您开始编写"另存为"对话框:

在您的MFC应用程序中创建一个新的对话框类,用于“另存为”对话框。您可以使用Visual Studio的向导来完成此操作。

添加"另存为"按钮或菜单项到您的应用程序。

在按钮或菜单项的单击事件处理程序中,调用您新创建的"另存为"对话框并显示它。

void CMyAppDlg::OnFileSaveAs()
{
    CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        _T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"), this);

    if (dlg.DoModal() == IDOK)
    {
        CString strFileName = dlg.GetPathName();

        // TODO: 保存文件
    }
}

在您的"另存为"对话框类中添加所需的控件,并添加保存文件的代码。

void CSaveAsDlg::OnOK()
{
    CString strFilePath, strFileName;
    GetDlgItemText(IDC_EDIT_FILEPATH, strFilePath);
    GetDlgItemText(IDC_EDIT_FILENAME, strFileName);

    CString strFullFileName = strFilePath + _T("\\") + strFileName;

    // TODO: 保存文件

    CDialogEx::OnOK();
}


请注意,您需要将上述代码中的TODO部分替换为保存文件的代码。您可以使用CFile类或其他文件I/O类来打开文件并将其写入磁盘。例如:


```c++
CFile file;
if (file.Open(strFullFileName, CFile::modeCreate | CFile::modeWrite))
{
    CString strText = _T("This is a sample text.");
    file.Write(strText, strText.GetLength() * sizeof(TCHAR));
    file.Close();
}


```
这是一个基本的示例,您可以根据您的需求进行修改和扩展。


//描述:文件另存为对话框
//参数:
void CFile::OpenFile()
{
    CString                strFilter;
    CString                str;
    CString             m_strTmpFile;
    CStdioFile            cfLogFile;
 
    //
    strFilter = "dat file (*.xlsx; *.xls)|*.xlsx; *.xls||";
    CFileDialog TmpDlg(FALSE, _T("xlsx"), _T("默认文件名"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, strFilter.GetBuffer(), this);
    
    if (TmpDlg.DoModal() == IDOK)    
    {    
        //获取文件路径
        m_strTmpFile = TmpDlg.GetPathName();
 
        //打开文件
        if (!cfLogFile.Open(m_strTmpFile , CFile::modeCreate | CFile::modeWrite | CFile::modeNoTruncate, NULL))
        {
            return;
        }
        
        //文件内容修改
        CString    strData = _T("测试文本内容");
        cfLogFile.WriteString("\r\n");
        cfLogFile.WriteString(strData);
        cfLogFile.SeekToEnd();
 
        cfLogFile.Close();
    }   
}