如何使用TEdit(文本框)中的文本编写文件

时间:2014-01-28 23:37:15

标签: c++ text-files c++builder

我想请求这个小程序的一些帮助。我正在使用Embarcadero RAD XE2并尝试使用按钮和文本框构建一个小表单。机制很简单,我在文本框中写了一些东西,当我点击按钮时,我希望将这些东西写入.txt文件。

以下是我的.cpp文件中的代码:

 //---------------------------------------------------------------------------
#include <fmx.h>
#include <iostream.h>
#include <fstream.h>
#include <String>
#pragma hdrstop
#include "STRTEST.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
int writefile(String A)
{
  ofstream myfile;
  myfile.open("D://example.txt");
  myfile << A;
  myfile.close();
  return 0;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  String mystr = Edit1->Text+';';
  writefile(mystr);
  Form1->Close();
}
//---------------------------------------------------------------------------

现在,我遇到了这个问题:在“mystr&lt;&lt; A;”行中我收到了这个错误。

  

[BCC32错误] STRTEST.cpp(13):E2094'运算符&lt;&lt;'未实施   为'UnicodeString'类型的参数输入'ofstream'完整解析器   上下文       STRTEST.cpp(10):解析:int writefile(UnicodeString)

我不知道该怎么办。如果我用直接字符串替换A,即(mystr&lt;&lt;“HI”),函数writefile完美无缺,并用该特定字符串写入文件。

那里的任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

只有在项目中定义<<时才会实现>>值的StringVCL_IOSTREAM运算符。即使这样,它仍然无法工作,因为您正在使用ofstream,它不接受Unicode数据(String是CB2009 +中UnicodeString的别名)。您必须改为使用wofstream,然后使用String::c_str()来传输值:

//---------------------------------------------------------------------------
#include <fmx.h>
#include <iostream>
#include <fstream>
#include <string>
#pragma hdrstop
#include "STRTEST.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.fmx"
TForm1 *Form1;
//---------------------------------------------------------------------------
int writefile(System::String A)
{
    std::wofstream myfile;
    myfile.open(L"D://example.txt");
    myfile << A.c_str();
    myfile.close();
    return 0;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    System::String mystr = Edit1->Text + L";";
    writefile(mystr);
    Close();
}
//---------------------------------------------------------------------------