流
中階會員
發表:36 回覆:142 積分:70 註冊:2003-07-24
發送簡訊給我
|
各位前輩好: 小弟根據書上的練習範例做了檔案傳送的程式
想請問前輩們一個小問題
//----------------------------------------------------------------
#include
#pragma hdrstop
#include "Unit1.h"
//----------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-----------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// 選擇一張用來傳送的圖片
if (OpenPictureDialog1->Execute())
Edit2->Text = OpenPictureDialog1->FileName;
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if ((Edit1->Text != "") && (Edit2->Text != ""))
{
// 開一個 File Stream 出來
// 並把我們要傳送的檔案經由該 File Stream 傳送
TFileStream *FStream;
FStream = new TFileStream(OpenPictureDialog1->FileName,fmOpenRead);
NMStrm1->Host = Edit1->Text ;
NMStrm1->FromName = Edit2->Text ;
// 傳送完畢將 Stream 關閉 FStream->Free();
}
}
//-----------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
// 讀入bmp檔案
Image1->Picture->LoadFromFile("2.bmp");
}
//-----------------------------------------------------------------
void __fastcall TForm1::NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm)
{
TFileStream * FStream;
if (FileExists("2.bmp"))
DeleteFile("2.bmp") ; FStream = new TFileStream("2.bmp",fmCreate);
FStream->CopyFrom(strm , strm->Size);
FStream->Free();
}
//----------------------------------------------------------------
上面的程式範例中,我確定可以執行了
但依照上面的程式,我是該有此檔案 (2.bmp) 於程式所在資料夾內
結果小弟去找發現並沒有此檔案,不知是何原因 感謝回答
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
流您好:
引言:
但依照上面的程式,我是該有此檔案 (2.bmp) 於程式所在資料夾內
結果小弟去找發現並沒有此檔案,不知是何原因 因為您的程式就是這樣寫的壓
TFileStream * FStream;
if (FileExists("2.bmp"))
DeleteFile("2.bmp") ; FStream = new TFileStream("2.bmp",fmCreate);
FStream->CopyFrom(strm , strm->Size);
FStream->Free();
順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> 發表人 -
|
流
中階會員
發表:36 回覆:142 積分:70 註冊:2003-07-24
發送簡訊給我
|
taishyang 您好: 我有試過,當我把原圖檔加入後,原圖檔並不會被刪除。 小弟的疑問是,既然傳送後就已經被處理了
如您所說的被刪除,不過 Image1 又有圖可顯示
這點也讓小弟百思不解 更過份的是 Image1->Picture->LoadFromFile("2.bmp"); OnButton4Click
Image1->Picture->SaveToFile("2.bmp"); 既然我 Image 已經讀到了,那應該就可存了吧
一樣不能存檔,是不是存到別的地方去了而小弟不曉得 但
OnButton4Click
Image1->Picture->SaveToFile("c:\\test\\2.bmp")就可以 我會這麼做的原因是,我其實想藉由這個程式為底
傳送一個任意的檔案,以 (OpenDialog) 開啟
如果檔案名稱相同,那我應該能取代吧
不能取代則先刪掉,然後在存入 不知道小弟有沒有什麼觀念錯誤的地方,請指正,謝謝 感謝回答
|
taishyang
站務副站長
發表:377 回覆:5490 積分:4563 註冊:2002-10-08
發送簡訊給我
|
流您好:
引言:
我有試過,當我把原圖檔加入後,原圖檔並不會被刪除。
不懂您的意思
引言:
小弟的疑問是,既然傳送後就已經被處理了
如您所說的被刪除,不過 Image1 又有圖可顯示
這點也讓小弟百思不解
假設您的圖片已經顯示在Image上,若您刪除掉圖檔,Image上的圖片仍然存在
您可以自行測試看看 1.手動加入圖檔至Image 2.刪除該圖檔
引言:
更過份的是 Image1->Picture->LoadFromFile("2.bmp");
OnButton4Click
Image1->Picture->SaveToFile("2.bmp");
既然我 Image 已經讀到了,那應該就可存了吧
一樣不能存檔,是不是存到別的地方去了而小弟不曉得
若您存的是不同的檔名呢? 比如說3.bmp 順心 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~>
|
流
中階會員
發表:36 回覆:142 積分:70 註冊:2003-07-24
發送簡訊給我
|
taishyang 您好: 小弟發現原來我程式中漏打了一行
不過漏打的加上後,程式反而不能執行了
經過不斷的修改,終於發現我快哄了 ...... 希望前輩們幫忙測試,小弟程式功力淺,看不出問題在哪
其中 NMStrm 與 NMStrmServ 於 FastNet 的元件標籤頁中
尚有加入 OpenPictureDialog 元件
三個 Button , 兩個 Edit (我是偷懶認為這樣就可以測試) 以下是書中所附之 source code
//--------------------------------------------------------------------------- #include
#pragma hdrstop #include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
//選擇一張用來傳送的圖片
if (OpenPictureDialog1->Execute())
LabeledEdit2->Text = OpenPictureDialog1->FileName;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn2Click(TObject *Sender)
{
//這個函式主要功能就是傳送我們選擇的檔案到Server端 if ((LabeledEdit1->Text != "") && (LabeledEdit2->Text != ""))
{
//開一個File Stream出來
//並把我們要傳送的檔案經由該File Stream傳送
TFileStream *FStream;
FStream = new TFileStream(OpenPictureDialog1->FileName, fmOpenRead); NMStrm1->Host = LabeledEdit1->Text;
NMStrm1->FromName = LabeledEdit2->Text;
NMStrm1->PostIt(FStream); // 漏打的於此 //傳送完畢後將Stream關閉
FStream->Free();
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn3Click(TObject *Sender)
{
//在Server端將接收到的圖片load出來
Image1->Picture->LoadFromFile("buf.bmp");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrm1Connect(TObject *Sender)
{
//在狀態列顯示Client已經與Server端連線
StatusBar1->SimpleText = "Connected";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrm1Disconnect(TObject *Sender)
{
//在狀態列顯示Client已經與Server端斷線
StatusBar1->SimpleText = "Disconnected";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrm1MessageSent(TObject *Sender)
{
//當我們在傳送Stream的時候
//會跳出一個MessageBox告訴我們將要傳送一個Stream到Server端
ShowMessage("A Stream Sent to " LabeledEdit1->Text);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrm1Status(TComponent *Sender,
AnsiString Status)
{
if (StatusBar1 != 0)
StatusBar1->SimpleText = Status;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrmServ1MSG(TComponent *Sender,
const AnsiString sFrom, TStream *strm)
{
//這個函式是Server端用來接收Client送過來的Stream
//在這邊我們是將收到的Stream存到buf.bmp這個檔案裡 //開一個File Stream
TFileStream *FStream; //如果buf.bmp已經存在就砍掉
if (FileExists("buf.bmp"))
DeleteFile("buf.bmp"); //將收到的Stream放到檔案中
FStream = new TFileStream("buf.bmp", fmCreate);
FStream->CopyFrom(strm, strm->Size);
//釋放Stream的資源
FStream->Free(); BitBtn3->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::NMStrmServ1Status(TComponent *Sender,
AnsiString Status)
{
if (StatusBar2 != 0)
StatusBar2->SimpleText = Status;
}
//--------------------------------------------------------------------------- 發表人 - 流 於 2003/09/08 17:41:51
|
流
中階會員
發表:36 回覆:142 積分:70 註冊:2003-07-24
發送簡訊給我
|
taishyang 版主您好: 很感謝您一直熱心的回答與找出問題 ^^ 經過剛剛的測試,其實發現了幾件事情
也可以說修改就可以了,只是很不甘心沒法跟範例一樣 QQ 原來小弟一直誤以為傳送的檔案會存在於程式的資料夾中
不過用了書上所附的執行檔才曉得
原來他會存在於 OpenPictureDialog 中,亦即開啟圖的資料夾中
是故圖片並不會存在於程式資料夾中,所以小弟根本找不到 QQ
不過也由於小弟程式與書附贈之參考程式不同
也無法在小弟的程式執行時看到圖溜進了 OpenPictureDialog 資料夾中
但是附贈之程式可看見就是 而小弟剛剛問的
『我有試過,當我把原圖檔加入後,原圖檔並不會被刪除。』
當然也刪除不了,呵,原因是根本就找錯資料夾 ^^" 程式中一開始並不會看見圖,要等到 Clinet 端把檔案傳送到 Server 後
再按 Load(Button3) 才能看到圖
所以小弟最大的問題就出在程式中的"黑箱作業流程"不明白 ...
所以才一個下午忙的頭昏昏的 ~ 感謝回答 ~ ^^
|