Dziękuje wszystkim za rady, ale żadna z nich nie rozwiązuje mojego problemu. Ponieważ nie wiem gdzie przy opisywaniu problemu popełniam błąd, iż nie umiem wam wytłumaczyć o co chodzi. Dlatego tu jest mój kod, który myślę po uruchomieniu i postępowaniu zgodnie z opisem pozwoli na zrozumienie błędu z którym się borykam. Jest to kod wzorowany na wskazanym przez Cyfrowego.
- Kod: Zaznacz cały
//---------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------
class myThread : public TThread{
TForm1 *tForm;
protected:
void __fastcall get_p(void);
void __fastcall Execute(void);
public:
// __fastcall myThread(TForm1 *Form);
myThread(TForm1 *_form):TThread(true), tForm(_form){}
};
/*__fastcall myThread::myThread(TForm1 *Form)
: TThread(Form)
{
tForm = Form;
} */
//---
/*void _fastcall myThread::get_p(void)
{
} */
void __fastcall myThread::Execute(void){
/*while(1)
{
Synchronize(get_p);
} */
using std::string;
using std::ifstream;
ifstream plik;
string wiadomosc;
if (FileExists("b.txt")) {
plik.open("b.txt");
if (plik.is_open()) {
getline(plik, wiadomosc);
}else{
tForm->Label1->Caption = "BÅ‚Ä…d odczytu pliku b.txt";
}
plik.close();
tForm->Label1->Caption = wiadomosc.c_str();
}else
tForm->Label1->Caption = "BÅ‚Ä…d nie odbaleziono pliku b.txt";
}
//-----------------------------------------------------------------
myThread* thread;
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner){
thread = new myThread(Form1);
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender){
thread->Resume();
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender){
straznik = 0;
OpenDialog1->InitialDir = "c:\\"; //katalog poczÄ…tkowy
if(OpenDialog1->Execute()){
if(!OpenDialog1->FileName.IsEmpty()){ //zabezpieczenie przed pustÄ… nazwÄ…
nazwa_pliku = OpenDialog1->FileName.c_str();
// if(ExtractFileExt(OpenDialog1->FileName).AnsiCompareIC("txt") == 0)
/* if (nazwa_pliku.find(".txt") != std::string::npos)
straznik = 1; */
}
}
}
//-----------------------------------------------------------------
Nie jestem pewien ale chyba w moim przypadku nie trzeba synchronizacji. Dobra w załączniku jest gotowy program. Więc przeprowadźcie dwie próby:
1.Naciśnij tylko guzik 1
zobacz wynik.
2.Ponownie uruchom naciśnij guzik2 wskaż jakikolwiek plik txt, a potem guzik1
zobacz wynik.
Jak pewnie zauważycie wyniki się różnią, ja nie wiem dlaczego. Jak już trzeci raz podkreślam myślę, iż FileExists("b.txt") przy próbie nr 2 nigdy nie będzie true, chyba że wskażesz plik b.txt (ale nie tak to ma działać). Wiem, że chodzi o tą część OpenDialog1->InitialDir = "c:\\";, tylko dlaczego do działa na FileExists tego już nie wiem. Gdybym wrzucił na dysk c: plik b.txt to będzie ok co potwierdza, iż po wywołaniu OpenDialog1->InitialDir = "c:\\"; dla całej aplikacji domyślna jest ścieżka c:.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
Tylko dwie rzeczy są nieskończone: wszechświat oraz ludzka głupota, choć nie jestem pewien co do tej pierwszej. - Albert Einstein
Błędów nie popełnia ten, kto nic nie robi. - Theodore Roosevelt