我需要帮助编码保存文本文件内容的正确方法。到目前为止,我已经设法保存并创建了一个文本文件,但是当我打开它时,它总是空着的。我正在使用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();
}
以下是我的计划的一些图片。我还附上了打印预览按钮的图片。我基本上喜欢我的保存按钮,用我的打印预览显示的内容保存文本文件。
答案 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.");
}
}