線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2368
推到 Plurk!
推到 Facebook!

我使用 Edit1->Text.c_str() 開啟多個檔案,會無法開啟?

答題得分者是:暗黑破壞神
jchuangjchuang
一般會員


發表:4
回覆:10
積分:2
註冊:2007-01-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-06-27 10:03:11 IP:211.21.xxx.xxx 訂閱
Dear all,

我之前是用turbo C 做的,現在試著轉成bcb。

這程是主要是要將一個兩進位的檔案開啟並畫出圖形,

可是當我在開啟第二個,或是第三個時,確無法開啟,

我試著用 ShowMessage(cp); 來看發生什麼事,結果發現第二次以後其檔案路徑,有問題,

想請問,這是什麼原因呢?

以下為程式及我要畫的三個兩進位檔。

<textarea class="c#" rows="10" cols="60" name="code">//--------------------------------------------------------------------------- #include #pragma hdrstop #include "Unit1.h" #include //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; String file_name; #define ary_len_byt (10800) #define ary_len_word (ary_len_byt/2) //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { FILE *fp; char ch; unsigned char CharA[ary_len_byt]; unsigned short WordA[ary_len_word]; int i=0,j=0; static unsigned char open_idx=0; char* cp; if ( open_idx==0 ) { cp = Edit1->Text.c_str(); ShowMessage(cp); if ( (fp=fopen(cp,"rb"))==NULL ) { // printf("open file error ! \n"); ShowMessage(AnsiString("Can't open R file")); } /*read binary file.*/ fread(&CharA,sizeof(CharA),1,fp); /* for( i=0;iAdd(WordA[j],j,clRed); j ; } fclose(fp); open_idx ; } else if ( open_idx==1 ) { cp = Edit1->Text.c_str(); ShowMessage(cp); if ( (fp=fopen(cp,"rb"))==NULL ) { ShowMessage(cp); ShowMessage(AnsiString("Can't open G file")); exit(1); } /*read binary file.*/ fread(&CharA,sizeof(CharA),1,fp); /* for( i=0;iAddX(WordA[j],j,clGreen); j ; } fclose(fp); open_idx ; } else if ( open_idx==2 ) { cp = Edit1->Text.c_str(); ShowMessage(cp); if ( (fp=fopen(cp,"rb"))==NULL ) { ShowMessage(cp); ShowMessage(AnsiString("Can't open B file")); exit(1); } /*read binary file.*/ fread(&CharA,sizeof(CharA),1,fp); for ( i=0;iAddX(WordA[j],j,clBlue); j ; } fclose(fp); open_idx ; } else { ShowMessage(AnsiString("you can't add chart any more.")); } //************************************************// } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { Close(); } //--------------------------------------------------------------------------- void __fastcall TForm1::DirectoryListBox1Change(TObject *Sender) { FileListBox1->Directory=DirectoryListBox1->Directory; } //--------------------------------------------------------------------------- void __fastcall TForm1::DriveComboBox1Change(TObject *Sender) { DirectoryListBox1->Drive=DriveComboBox1->Drive; } //--------------------------------------------------------------------------- void __fastcall TForm1::FilterComboBox1Change(TObject *Sender) { FileListBox1->Mask=FilterComboBox1->Mask; } //--------------------------------------------------------------------------- void __fastcall TForm1::FileListBox1Change(TObject *Sender) { file_name=FileListBox1->FileName; Edit1->Text=file_name; if ( file_name != "" ) { } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { FilterComboBox1->Filter="*.txt |*.txt"; Chart1->RemoveAllSeries();//?清除Chart1上所有舊?Series Chart1->View3D=false;//?不要?3D?立體 Chart1->Legend->Visible=true;//秀圖例說明 //?設定此?char?Title?名稱 //(是?StringList?不是?String?所以不能用?Chart1->Title->Text="xxx"?...) Chart1->Title->Text->Clear(); Chart1->Title->Text->Add("Shading table"); //*****************************************// //?動態宣告一個??THorizBarSeries?型態的?Series //?其它的?Series?型態有哪些?請看?TChartSeries?之?Help // Series1=newTHorizBarSeries(Chart1); Series1->ParentChart=Chart1; Series2->ParentChart=Chart1; Series3->ParentChart=Chart1; //Series1->Marks->Visible=true;//?設定要提示說明 Series1->Marks->Style=smsValue;//?提示說明內容為?Label //(註)?Series1->Marks->Style?內容請參考?TSeriesMarksStyle?之?Help Series1->SeriesColor=clRed; //?設線條1為藍色,不設則自動給色 Series2->SeriesColor=clGreen; //?設線條1為藍色,不設則自動給色 Series3->SeriesColor=clBlue; //?設線條1為藍色,不設則自動給色 Series1->Title='R'; Series2->Title='G'; Series3->Title='B'; //?輸入假資料 int V;//?Value String L;//Label for ( int i=1;i<=8;i ) { V=i;//Series值 L="V" IntToStr(i);//軸名稱 //Series1->Add(V,L,clRed); Series1->AddX(V,L,clRed); } for ( int i=1;i<=8;i ) { V=i;//Series值 L="V" IntToStr(i);//軸名稱 //Series1->Add(V,L,clRed); Series2->AddX(V,L,clBlue); } for ( int i=3;i<9;i ) { V=i;//Series值 L="V" IntToStr(i);//軸名稱 //Series1->Add(V,L,clRed); Series3->AddX(V,L,clGreen); } //*****************************************// //ShowMessage(AnsiString("Can't open R file")); } //--------------------------------------------------------------------------- </textarea>
附加檔案:4681c55f8de4f_R_raw.txt
編輯記錄
taishyang 重新編輯於 2007-06-27 11:41:30, 註解 將文章分類成[問題]‧
taishyang 重新編輯於 2007-06-27 11:41:30, 註解 將文章分類成[問題]‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-06-27 18:31:06 IP:220.131.xxx.xxx 未訂閱
cp = Edit1->Text.c_str();
把這行改掉。
看你要不要做成 char filepath[512];
strcpy(filepath, Edit1->Text.c_str());
這樣的方式。
這先確認不是 point 不小心被你改掉。。。。。
jchuangjchuang
一般會員


發表:4
回覆:10
積分:2
註冊:2007-01-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-06-28 10:51:43 IP:61.222.xxx.xxx 訂閱
謝謝暗黑破壞神的建議。

我測式後發現,因為我在畫出圖後會產生一個txt檔,

如果txt 檔還沒產生時,就按,就會發生問題,

如果等txt 檔產生後再等一段時間,就不會有問題,

會不會是以上的原因所造成的呢??

JC Huang.
jchuangjchuang
一般會員


發表:4
回覆:10
積分:2
註冊:2007-01-10

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-06-29 10:34:03 IP:61.222.xxx.xxx 訂閱
謝謝 暗黑破壞神 的建議,

我用了之後就不會發生開檔不成功的現像了。

我想應該是 cp?=?Edit1->Text.c_str();

其中cp 只是儲存了第一個pointer ,

而不是存整個字串所造成的。

如果有說錯的話,麻煩請指正,謝謝了。


===================引 用 暗黑破壞神 文 章===================
cp?=?Edit1->Text.c_str();
把這行改掉。
看你要不要做成 char filepath[512];
strcpy(filepath, Edit1->Text.c_str());
這樣的方式。
這先確認不是 point 不小心被你改掉。。。。。
系統時間:2024-04-28 12:34:53
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!