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

到底如何讀取檔案的內容~~拜託幫幫忙!!!

尚未結案
coolfish1208
一般會員


發表:1
回覆:2
積分:0
註冊:2003-05-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-05-07 00:11:58 IP:219.68.xxx.xxx 未訂閱
因為課程所需,我需要用到最低階的開啟檔案方式來讀取bmp檔 && wav檔 bmp檔需要讀取bitmapfileheader && bitmapinfoheader 這些都需要一個byte一個byte的讀取,但是我真的找不到方式可以成功的讀取 我試過用 方法一:AssignFile,reset,blockread 這個方式讀取出來都不正確 方法二:fileopen,fileseek,fileread這個方式我也沒辦法將資料讀取到我要的地方 所以想要請問各位前輩,假設沒有物件,你們要如何讀取bmp和wav的檔案呢?? 方法一跟方法二都可以開啟檔案,他們倆者是差在哪裡呢?? 我參考了C ,在C 中用 fread(&bmfh.bfType,4,1,stream) 就可以將資料讀取到bfType中,且filepos會跟著移動,但是delphi我真的找不到方法 可以請知道的前輩給點指示嗎~~~真的寫到很灰心了!!
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-05-07 00:27:24 IP:140.135.xxx.xxx 未訂閱
coolfish1208您好:   
引言:但是delphi我真的找不到方法
別灰心,我幫您找了幾個... 可以參考下面連結: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29294 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29327 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=28829 順心 <>~我也是在學習的階段,所以請您多多見諒與指教~ 發表人 -
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-05-07 09:40:09 IP:218.16.xxx.xxx 未訂閱
這個是 Delphi Help 取出來的例于 前段讀取檔案到 Buffer 的方法應可照用,後段放到 StringGrid 的程式碼換成你分拆 BMP / WAV 的程式碼便好了。
procedure TForm1.Button1Click(Sender: TObject);
var
  iFileHandle: Integer;
  iFileLength: Integer;
  iBytesRead: Integer;
  Buffer: PChar;
  i: Integer
begin
  if OpenDialog1.Execute then
  begin
    try
      iFileHandle := FileOpen(OpenDialog1.FileName, fmOpenRead);
      iFileLength := FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(AllocMem(iFileLength   1));
      iBytesRead := FileRead(iFileHandle, Buffer^, iFileLength);          FileClose(iFileHandle);
      for i := 0 to iBytesRead-1 do
      begin
        StringGrid1.RowCount := StringGrid1.RowCount   1;
        StringGrid1.Cells[1,i 1] := Buffer[i];
        StringGrid1.Cells[2,i 1] := IntToStr(Integer(Buffer[i]));
      end;
    finally
      FreeMem(Buffer);
    end;
  end;
end;
發表人 - Justmade 於 2003/05/07 09:42:08
coolfish1208
一般會員


發表:1
回覆:2
積分:0
註冊:2003-05-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-05-07 17:18:25 IP:219.68.xxx.xxx 未訂閱
感謝大家的指導!!!^^ 關於Help那篇我已經看過好幾次了,也有下去試過,但是我不了解StringGrid1 那部份所代表的意思,所以也不知道怎麼放!! 如果可以的話可以請前輩簡單的解釋一下StringGrid1那三行的意思嗎?? 又有參考過用TFileStream 或 TMemoryStream的方式,這種方式跟fileopen這 些方式比較起來那種比較容易使用呢?? 非常感謝你們的回答!!!^^
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-05-07 17:30:13 IP:218.16.xxx.xxx 未訂閱
TFileStream 是 物件,不是不可用物件嗎 ??? 你跟本不需要 StrGrid 的部份,Buffer 裡已有整個檔案的資料,接著你要做的就是分析每個 Byte Buffer[0] 就是第一個 Byte Buffer[1] 就是第二個 Byte 如此類推 你的問題是如何讀取,這個方法已可讀取檔案至變數中,至放甚樣分柝,那要看不同檔案的格式,亦是另一個問題了。
coolfish1208
一般會員


發表:1
回覆:2
積分:0
註冊:2003-05-06

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-05-07 21:22:36 IP:219.68.xxx.xxx 未訂閱
謝謝板大熱心的回答! 但是... 我自己宣告的BitmapFileHeader如下 tagBITMAPFILEHEADER = record bfType: Word; bfSize: LongWord; bfReserved1: Word; bfReserved2: Word; bfOffbits: LongWord; end; 現在我的bfType需要的兩個Byte...但是陣列好像沒辦法把buffer[0]buffer[1]的內容放到一個變數 所以我才會捨棄用這種方式...>< 最主要是因為不知道怎麼放進去!! 最希望的方式就是像C fread(&bmfh.bfType,4,1,stream) 這樣當然可以很順利讀到我指定的位置.. 但是delphi有這種方法嗎??
Naruto
一般會員


發表:20
回覆:19
積分:7
註冊:2003-03-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-05-08 09:47:03 IP:61.219.xxx.xxx 未訂閱
//提供一個範例如下: var aBmpFH: TBitmapFileHeader;//檔頭資訊 aBmpIH: TBitmapInfoHeader;//檔案資訊 aFile: TFileStream; begin try aFile:=TFileStream.Create( aFileName, fmOpenRead ); aFile.ReadBuffer(aBmpFH, SizeOf(aBmpFH));//讀取檔頭資訊 aFile.ReadBuffer(aBmpIH, SizeOf(aBmpIH));//讀取檔案資訊 finally aFile.Free; end; end; end;
系統時間:2024-04-26 17:13:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!