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

請問關於檔案傳送問題

答題得分者是:taishyang

中階會員


發表:36
回覆:142
積分:70
註冊:2003-07-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-08 14:49:29 IP:211.23.xxx.xxx 未訂閱
各位前輩好:    小弟根據書上的練習範例做了檔案傳送的程式 想請問前輩們一個小問題
//----------------------------------------------------------------
#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 引用回覆 回覆 發表時間:2003-09-08 15:03:13 IP:140.135.xxx.xxx 未訂閱
流您好:
引言: 但依照上面的程式,我是該有此檔案 (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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-08 15:23:43 IP:211.23.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-08 15:39:37 IP:140.135.xxx.xxx 未訂閱
流您好:
引言: 我有試過,當我把原圖檔加入後,原圖檔並不會被刪除。
不懂您的意思
引言: 小弟的疑問是,既然傳送後就已經被處理了 如您所說的被刪除,不過 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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-08 17:23:01 IP:211.23.xxx.xxx 未訂閱
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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-08 17:39:29 IP:211.23.xxx.xxx 未訂閱
taishyang 版主您好: 很感謝您一直熱心的回答與找出問題 ^^ 經過剛剛的測試,其實發現了幾件事情 也可以說修改就可以了,只是很不甘心沒法跟範例一樣 QQ 原來小弟一直誤以為傳送的檔案會存在於程式的資料夾中 不過用了書上所附的執行檔才曉得 原來他會存在於 OpenPictureDialog 中,亦即開啟圖的資料夾中 是故圖片並不會存在於程式資料夾中,所以小弟根本找不到 QQ 不過也由於小弟程式與書附贈之參考程式不同 也無法在小弟的程式執行時看到圖溜進了 OpenPictureDialog 資料夾中 但是附贈之程式可看見就是 而小弟剛剛問的 『我有試過,當我把原圖檔加入後,原圖檔並不會被刪除。』 當然也刪除不了,呵,原因是根本就找錯資料夾 ^^" 程式中一開始並不會看見圖,要等到 Clinet 端把檔案傳送到 Server 後 再按 Load(Button3) 才能看到圖 所以小弟最大的問題就出在程式中的"黑箱作業流程"不明白 ... 所以才一個下午忙的頭昏昏的 ~ 感謝回答 ~ ^^
系統時間:2024-04-20 7:49:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!