全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2513
推到 Plurk!
推到 Facebook!

ansiString轉成char字串的問題..

答題得分者是:RedSnow
haman
中階會員


發表:46
回覆:137
積分:56
註冊:2005-03-10

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-06-02 23:49:10 IP:211.76.xxx.xxx 未訂閱
我有一個字串(假設是c:\123.txt),是由 test = test ExtractFilePath(OpenDialog1->FileName); test = test "\\"; test = test ExtractFileName(OpenDialog1->FileName); test = ExtractFileName(OpenDialog1->FileName); 中取出來的,我想利用fopen中的rw等的方式建立(或寫入) 但問題來了,fopen中的path是const char*的型態, 而ExtractFilePath(OpenDialog1->FileName)傳回來的是ansiString的型態 試過用char *s; s=test.c_str()及 char ch(100); strcpy(ch,test.c_str()); 兩種方法,都抓不到字串,請問我該如何把ansistring的型態轉成char *的型態呢?
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-06-03 01:24:44 IP:218.19.xxx.xxx 未訂閱
haman 您好:    您大概是想得太複雜了,給您一個範例參考:
AnsiString test = ExtractFileName(OpenDialog1->FileName);
FILE *pt;
char c;
if ((pt = fopen(test.c_str(), "r")) == NULL) {
    ShowMessage("Cannot open file!");
} else {
    while (!feof(pt)) {
        fread(&c, 1, 1, pt);
        ......
    }
    fclose(pt);
}
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-06-03 03:07:00 IP:221.169.xxx.xxx 未訂閱
haman:
ExtractFilePath(OpenDialog1->FileName);
得到的只是路徑,例:
OpenDialog1->FileName -->> c:\123.txt
ExtractFilePath(OpenDialog1->FileName) -->> c:\
所以你的test假設test="";
test = test   ExtractFilePath(OpenDialog1->FileName); -->> c:\
test = test   "\\"; -->> c:\test = test   ExtractFileName(OpenDialog1->FileName); -->> c:\\123.txt
你瞧c:\123.txt != c:\\123.txt
test 直接導入OpenDialog1->FileName
test=OpenDialog1->FileName;
fopen(test.c_str(), "r")) 
或:
char *s;
s=test.c_str()及
char ch(100);
strcpy(ch,test.c_str());
隨便你使用!
因為你只是將檔案搞錯了!
請參考!    
Andy Chang 發表人 - andychang1690 於 2005/06/03 11:04:40
------
Andy Chang
RedSnow
版主


發表:79
回覆:1322
積分:845
註冊:2003-12-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-06-03 03:15:49 IP:218.19.xxx.xxx 未訂閱
呵呵~真不好意思,一時偷懶才照抄一行而已,結果竟然忘了修改:
AnsiString test = OpenDialog1->FileName;
FILE *pt;
char c;
if ((pt = fopen(test.c_str(), "r")) == NULL) {
    ShowMessage("Cannot open file!");
} else {
    while (!feof(pt)) {
        fread(&c, 1, 1, pt);
        ......
    }
    fclose(pt);
}
前一篇的錯誤就不修改了,留在那裡警惕自己吧。
haman
中階會員


發表:46
回覆:137
積分:56
註冊:2005-03-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-06-03 19:33:33 IP:211.76.xxx.xxx 未訂閱
嗯..我找到問題了,一個粗心大意的錯@@" 原來是我把SaveDialog1打成了OpenDialog1 而OpenDialog1是我在另一個event中用到的, 順便把改好的貼上來吧@@" void __fastcall TForm1::Button1Click(TObject *Sender) { String test ; OpenDialog1->Execute(); test = test ExtractFilePath(OpenDialog1->FileName); test = test ExtractFileName(OpenDialog1->FileName); Edit2->Text = test; FilePath = test; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { String test; char *s = StrNew(FilePath.c_str()); SaveDialog1->Execute(); test =ExtractFilePath(SaveDialog1->FileName); test = test ExtractFileName(SaveDialog1->FileName); Edit2->Text = test; char *ch=StrNew(test.c_str()),line; FILE *FileTest = fopen(ch,"wb"); FILE *FileTestS = fopen(s,"rb"); while(!feof(FileTestS)) { line = getc(FileTestS); putc(line,FileTest); } fclose(FileTestS); fclose(FileTest); } 一個單純的傳檔(或是說copy吧)^^" 來去研究如何加上網路吧^^ 感謝各位大大
系統時間:2024-05-04 4:00:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!