void __fastcall TForm1::RzBitBtn1Click(TObject *Sender)
{
if(AdvEdit1->Text.IsEmpty())return;
TIniFile *fstream = new TIniFile("C:\\test.zzz");
fstream->WriteString("General", "Value", AdvEdit1->Text);
delete fstream;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::RzBitBtn2Click(TObject *Sender)
{
TIniFile *fstream = new TIniFile("C:\\test.zzz");
AdvEdit1->Text = fstream->ReadString("General", "Value", 0);
delete fstream;
}
//---------------------------------------------------------------------------
Помогите с вводом из файла в TEdit
Возникла проблема.
Мне нужно было, чтобы в файл сначала выводилась инфа, а потом ее можно было восстановить в элементе Edit1
Сам исходник прикладываю тоже. Помогите. Просто не понимаю в чем проблема. Или просто не знаю.
Цитата:
//-----------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hfile;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
FILE *F;
if((F = fopen("Test.txt", "wt")) == NULL)
{ShowMessage("Файл не удается создать");
return;
}
fprintf(F,"Поле %s",Edit1->Text);
fclose(F);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
FILE *F;
if((F = fopen("Test.txt", "rt")) == NULL)
{
ShowMessage("Файл не удается открыть");
return;
}
fscanf(F," %s",Edit1->Text);
if(Edit1->Text == NULL)
{ShowMessage("Строка пуста");
return;
}
fclose(F);
}
//---------------------------------------------------------------------------
----------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
HANDLE hfile;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
FILE *F;
if((F = fopen("Test.txt", "wt")) == NULL)
{ShowMessage("Файл не удается создать");
return;
}
fprintf(F,"Поле %s",Edit1->Text);
fclose(F);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
FILE *F;
if((F = fopen("Test.txt", "rt")) == NULL)
{
ShowMessage("Файл не удается открыть");
return;
}
fscanf(F," %s",Edit1->Text);
if(Edit1->Text == NULL)
{ShowMessage("Строка пуста");
return;
}
fclose(F);
}
//---------------------------------------------------------------------------
----------------------------------
fscanf(F," %s",Edit1->Text);
так
char tmp[512];
fscanf(F," %s", tmp);
Edit1->Text = tmp;
Цитата:
Originally posted by _kolyan
напиши вместо
fscanf(F," %s",Edit1->Text);
так
char tmp[512];
fscanf(F," %s", tmp);
Edit1->Text = tmp;
напиши вместо
fscanf(F," %s",Edit1->Text);
так
char tmp[512];
fscanf(F," %s", tmp);
Edit1->Text = tmp;
Я так пробовал, никак не получается. Я заметил, если строка не пуста в Edit1, то ошибка не выдается. Например, строку ввожу - сохраняю, далее ее не удаляя, пишу восстановить - безошибочно. А если стереть, то выдает ошибку по адресу.
Если использовать char tmp[512] - то тогда наверное придется сделать следущее:
char tmp[512] = IntToStr(Form1->Edit1->Text);
Ведь по другому не будут совпадать значения по типам..
В общем не понимаю что за фигня ((((
Edit1->Text это вообще-то говоря даже не переменная - это свойство, которок возвращает объект типа AnsiString. И написать бодягу вроде IntToStr(Form1->Edit1->Text) ты можешь только потому, что билдера (и с++ вообще) развитое приведение типа по умолчанию, дельфи бы тебе такого не дал написать. В итоге ты олучаешь строковое представление указателя на Text, но не сам текст.
чтобы сохранить данные в твой файл достаточно сделать
fprintf(F,"%s",Edit1->Text.c_str()); - обрати внимание на c_str - она возвращает указатель на текстовый буфер объекта AnsiString, не помню точно, но кажется это копия, а не реальный буфер, поэтому его можно использовать только для чтения.
для чтения из файла и записи в Edit1->Text остается тот код, который я уже привел. Что до ошибки по типам, то Text = tmp вовсе не присваивает указатели, а вызывает конструктор AnsString(char*), так что тут все нормально.
Цитата:
Originally posted by Alex_N
Всем привет!
Возникла проблема.
Мне нужно было, чтобы в файл сначала выводилась инфа, а потом ее можно было восстановить в элементе Edit1
Сам исходник прикладываю тоже. Помогите. Просто не понимаю в чем проблема. Или просто не знаю.
Всем привет!
Возникла проблема.
Мне нужно было, чтобы в файл сначала выводилась инфа, а потом ее можно было восстановить в элементе Edit1
Сам исходник прикладываю тоже. Помогите. Просто не понимаю в чем проблема. Или просто не знаю.
Поработай в этом направлении...
Код: