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

請問將檔案讀入陣列之疑問

尚未結案
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-11-25 10:55:31 IP:61.218.xxx.xxx 未訂閱
請問下面陣列宣告是否不一樣? 1. BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 2. BYTE pvCert[1013]; 為何執行 if (OpenDialog1->Execute()) { szFilePathName=(OpenDialog1->FileName); hSource=new TFileStream(szFilePathName,fmOpenRead); ulCertLength=hSource->Size; //其中ulCertLength=1013 hSource->ReadBuffer(pvCert,ulCertLength); } 其值會不一樣 其中若宣告BYTE pvCert[1013];其值是正確 為何 BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 其值會少掉很多,其陣列大小不是為1013嗎? 請問是何原因? 謝謝
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-11-25 11:13:42 IP:221.169.xxx.xxx 未訂閱
引言: 請問下面陣列宣告是否不一樣? 1. BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 2. BYTE pvCert[1013]; 為何執行 if (OpenDialog1->Execute()) { szFilePathName=(OpenDialog1->FileName); hSource=new TFileStream(szFilePathName,fmOpenRead); ulCertLength=hSource->Size; //其中ulCertLength=1013 hSource->ReadBuffer(pvCert,ulCertLength); } 其值會不一樣 其中若宣告BYTE pvCert[1013];其值是正確 為何 BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 其值會少掉很多,其陣列大小不是為1013嗎? 請問是何原因? 謝謝
試試看下面的程式碼吧
if (OpenDialog1->Execute())
{
szFilePathName=(OpenDialog1->FileName);
hSource=new TFileStream(szFilePathName,fmOpenRead);
ulCertLength=hSource->Size; //其中ulCertLength=1013

BYTE *pvCert ;
pvCert=new BYTE[ulCertLength];    hSource->ReadBuffer(pvCert,ulCertLength);    delete [] pvCert;    }
偶猜你是在取得 hSource->Size 就先NEW了吧,你必須先取得 hSource->Size 再NEW喔,如上面紅色部分 有件事有點好奇~~你可以直接使用TFileStream的Memory 的屬性阿,有需要將資料在取出嗎? ========================= 大家一起快樂寫程式
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-11-25 11:22:56 IP:61.218.xxx.xxx 未訂閱
1.我是之後才NEW 2.因為我要將檔案資料讀出,存入晶片卡中。 謝謝    
引言:
引言: 請問下面陣列宣告是否不一樣? 1. BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 2. BYTE pvCert[1013]; 為何執行 if (OpenDialog1->Execute()) { szFilePathName=(OpenDialog1->FileName); hSource=new TFileStream(szFilePathName,fmOpenRead); ulCertLength=hSource->Size; //其中ulCertLength=1013 hSource->ReadBuffer(pvCert,ulCertLength); } 其值會不一樣 其中若宣告BYTE pvCert[1013];其值是正確 為何 BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 其值會少掉很多,其陣列大小不是為1013嗎? 請問是何原因? 謝謝
試試看下面的程式碼吧
if (OpenDialog1->Execute())
{
szFilePathName=(OpenDialog1->FileName);
hSource=new TFileStream(szFilePathName,fmOpenRead);
ulCertLength=hSource->Size; //其中ulCertLength=1013

BYTE *pvCert ;
pvCert=new BYTE[ulCertLength];    hSource->ReadBuffer(pvCert,ulCertLength);    delete [] pvCert;    }
偶猜你是在取得 hSource->Size 就先NEW了吧,你必須先取得 hSource->Size 再NEW喔,如上面紅色部分 有件事有點好奇~~你可以直接使用TFileStream的Memory 的屬性阿,有需要將資料在取出嗎? ========================= 大家一起快樂寫程式
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-11-25 14:02:28 IP:61.63.xxx.xxx 未訂閱
引言: 請問下面陣列宣告是否不一樣? 1. BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 2. BYTE pvCert[1013]; 為何執行 if (OpenDialog1->Execute()) { szFilePathName=(OpenDialog1->FileName); hSource=new TFileStream(szFilePathName,fmOpenRead); ulCertLength=hSource->Size; //其中ulCertLength=1013 hSource->ReadBuffer(pvCert,ulCertLength); } 其值會不一樣 其中若宣告BYTE pvCert[1013];其值是正確 為何 BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 其值會少掉很多,其陣列大小不是為1013嗎? 請問是何原因? 謝謝
shing.net你好: 應該不會不同吧,不曉得你說的少很多是什麼意思,是 class="code"> hSource->ReadBuffer(pvCert,ulCertLength);//其中ulCertLength=1013 只要run過沒掛的話,就確定有1013個bytes讀入buffer中,所以不太可能會有少bytes! 是不是什麼地方動到了,比如hSource的position屬性,或..... 另外buffer使用前ZeroMemory一下應該是比較安全的! 參著,!
shing.net
中階會員


發表:207
回覆:124
積分:66
註冊:2002-03-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-11-29 08:46:24 IP:61.218.xxx.xxx 未訂閱
問題已解決,問題出在寫入時使用sizeof()造成byte數錯誤 謝謝
引言:
引言: 請問下面陣列宣告是否不一樣? 1. BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 2. BYTE pvCert[1013]; 為何執行 if (OpenDialog1->Execute()) { szFilePathName=(OpenDialog1->FileName); hSource=new TFileStream(szFilePathName,fmOpenRead); ulCertLength=hSource->Size; //其中ulCertLength=1013 hSource->ReadBuffer(pvCert,ulCertLength); } 其值會不一樣 其中若宣告BYTE pvCert[1013];其值是正確 為何 BYTE *pvCert ; pvCert=new BYTE[ulCertLength]; 其值會少掉很多,其陣列大小不是為1013嗎? 請問是何原因? 謝謝
shing.net你好: 應該不會不同吧,不曉得你說的少很多是什麼意思,是 class="code"> hSource->ReadBuffer(pvCert,ulCertLength);//其中ulCertLength=1013 只要run過沒掛的話,就確定有1013個bytes讀入buffer中,所以不太可能會有少bytes! 是不是什麼地方動到了,比如hSource的position屬性,或..... 另外buffer使用前ZeroMemory一下應該是比較安全的! 參著,! < face="Verdana, Arial, Helvetica">
系統時間:2024-06-28 19:15:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!