将文本文件整个保存在其中

时间:2014-11-29 22:32:25

标签: .net visual-studio visual-studio-2012 visual-c++ c++-cli

我需要帮助编码保存文本文件内容的正确方法。到目前为止,我已经设法保存并创建了一个文本文件,但是当我打开它时,它总是空着的。我正在使用Visual Studio 2012并使用c ++ - CLI创建Windows表单。

这就是我所拥有的:

private: System::Void saveToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
          {
  IO::Stream^ myStream;
  SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;
  saveFileDialog1->Filter = "txt files (*.txt)|*.txt";
  saveFileDialog1->FilterIndex = 1;
  saveFileDialog1->RestoreDirectory = true;
  if ( saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
  {
     if ( (myStream = saveFileDialog1->OpenFile()) != nullptr )
     {

        // Code to write the stream goes here.
        myStream->Close();
     }
  }
}

基本上,我试图实现下面的代码,唯一不同的是我使用的是c ++ - CLI而不是c#,而不是在文件中写入一些文本(bw.Write("示例文本文件。"),我希望文本文件在我的窗体中保存我的文本框值,所以像bw.Write(txtTextBox1-> Text)。但就我而言我担心,c ++并没有使用c#做的那些命令。

SaveFileDialog sgd = new SaveFileDialog();
sfd.Filter = "Text File|*.txt";
sfd.FileName = "My Text File";
sfd.Title = "Save Text File";
if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
    string path = sft.FileName;
    BinaryWriter bw = new BinaryWriter(File.Create(path));
    bw.Write("Example text file.");
    bw.Dispose();
}

以下是我的计划的一些图片。我还附上了打印预览按钮的图片。我基本上喜欢我的保存按钮,用我的打印预览显示的内容保存文本文件。

Windows Form
Print Preview

2 个答案:

答案 0 :(得分:1)

为什么有人想在C ++ / CLI中实现Forms程序超出我的范围。 C ++ / CLI很适合很多东西,但是对于纯粹管理的东西(比如Forms API),我认为C#更好。有更多代码示例可供绘制,语法通常更简洁方便。

也就是说,这是您包含的C#代码的C ++ / CLI版本,它使用StreamWriter代替BinaryWriter进行的小改动:

SaveFileDialog^ sfd = gcnew SaveFileDialog();

try
{
    sfd->Filter = "Text File|*.txt";
    sfd->FileName = "My Text File";
    sfd->Title = "Save Text File";
    if (sfd->ShowDialog() == DialogResult::OK)
    {
        String^ path = sfd->FileName;
        StreamWriter^ writer = gcnew StreamWriter(File::Create(path));
        try
        {
            writer->Write("Example text file.");
        }
        finally
        {
            delete writer;
        }
    }
}
finally
{
    delete sfd;
}

请注意,除了一些较小的语法差异和缺少C#的using便利习惯用语之外,它基本上与C#代码完全相同。您将看到其他实现的类似相似之处。 C ++ / CLI使用(或至少可以使用)与C#中使用的方法完全相同。

答案 1 :(得分:1)

这里是C#代码的替代品......

使用Unicode字符集的UTF-8编码将文本写入文件(即 字符集.NET字符串使用):

private: System::Void saveToolStripMenuItem_Click(System::Object^  sender, System::EventArgs^  e) 
{
    SaveFileDialog^ saveFileDialog1 = gcnew SaveFileDialog;
    saveFileDialog1->Filter = "txt files (*.txt)|*.txt";
    saveFileDialog1->FilterIndex = 1;
    saveFileDialog1->RestoreDirectory = true;
    if ( saveFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK )
    {
       File::WriteAllText(saveFileDialog1->FileName, "Example text file.");
    }
}