讀取檔案的問題 |
尚未結案
|
newfbimod
一般會員 發表:3 回覆:9 積分:2 註冊:2004-11-08 發送簡訊給我 |
各位前輩, 小弟想請問一下若我想從Original.txt讀出裡面的文字,並將其順序顛倒寫入new.txt裡,也就是說若在Original.txt裡的文字為abc,那存到new.txt
應該是cba,我的程式碼如下
#include
|
fffhghgjh
一般會員 發表:2 回覆:33 積分:17 註冊:2004-12-23 發送簡訊給我 |
char* filein= "c:\\Original.txt";//檔案位置要設定好 char* fileout="c:\\new.txt"; #pragma argsused int main(int argc, char* argv[]) { long CharNum, offset; char Ch; fstream input; fstream output; input.open(filein,ios::in); if(!input) { cout<<"in-file open fail"; } output.open(fileout,ios::out); if(!output) { cout<<"out-file open fail"; } input.seekg(0L,ios::end); CharNum = input.tellg(); for(offset=1L;offset<=CharNum;offset ) { input.seekg(-offset, ios::end); Ch=input.get(); output< |
ldd
一般會員 發表:12 回覆:62 積分:19 註冊:2004-07-06 發送簡訊給我 |
|
newfbimod
一般會員 發表:3 回覆:9 積分:2 註冊:2004-11-08 發送簡訊給我 |
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
引言: 不好意思 我剛try了一下 我產生的檔案市跟執行檔位於同一目錄下阿 且我也有將路徑設定好囉 可是 輸出的檔案還是什麼都沒有阿 不過靈異的是 我看字元數目檢查 字元數跟我的輸入檔是一樣的說 可是為什麼看不到半個字呢 難道是我的電腦有問題< >< >Hi~newfbimod 看了一下應該不是靈異現象~你的程式碼這裡好像有錯~ 你改成如下應該就沒問題了 for(offset=CharNum-1;offset>=0;offset--) { input.seekg(offset); Ch=input.get(); output< |
newfbimod
一般會員 發表:3 回覆:9 積分:2 註冊:2004-11-08 發送簡訊給我 |
|
RedSnow
版主 發表:79 回覆:1322 積分:845 註冊:2003-12-15 發送簡訊給我 |
newfbimod 您好: 我沒有測試過您的程式 (因為顯示出來的程式碼似乎不完整,建議您下回在程式碼前後加上 [code] 及 [/code] 這一組內含指令簡碼),但因為您提到 "字元數目檢查字元數跟我的輸入檔是一樣的",所以您應該先使用查看 Hex 碼的工具或 DOS 的 debug 工具來確認一下,看看新檔案被填入的內容是不是原始檔內的資料?如果確定檔案內容確實有被填寫而不是空白的內容的話,那麼問題就可能是出在 "檔案結尾字元 (EOF)" 這上頭了,我猜想您是在 DOS 或類似的環境下查看檔案內容的,因為檔案內容被您 "反過來" 填寫,因此原先的 "檔案結尾字元" 就變成檔案開頭的第一個字元了,當您使用 DOS 指令來 TYPE 檔案內容時,其後的資料就看不到了。 我不知道您對 "檔案結尾字元 (EOF)" 熟不熟?我簡單的說明如下: EOF = End Of File character
EOF = ASCII Code 26 (0x1A) = Ctrl-Z 如果您使用 XVI32 這類查看 HEX Code 的程式載入檔案,或是透過 DOS Box 使用 debug 指令載入檔案,查看檔案的第一個位元組,若該位元組是 "1A",那就對了! 您將測試檔案改成不使用 EOF 結尾的格式,或是轉換時先檢查原始檔案是否有 EOF 字元?若有的話則予略過,這樣子應該就可以了。
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
引言: 應該是從"檔案開始"的地方,往後算offset,然後移到 最後一個字元開始讀取 而我之前的方法,則是先移到檔案結束的地方然後往前算offset開始讀取字元 for(offset=1L;offset<=CharNum;offset ) { input.seekg(-offset, ios::end); Ch=input.get(); output< |
newfbimod
一般會員 發表:3 回覆:9 積分:2 註冊:2004-11-08 發送簡訊給我 |
rogan321大大
沒錯 他的確回傳-1 表示我的檔案旗標移動失敗
至於input.seekg(-offset, ios::end);我是根據我書上的範例所key-in
它的意思是從檔案結束的位置移到倒數第offset個字元的位置
在BCB的help檔裡有這樣一段seekg(off_type& off, ios_base::seekdir dir);跟這一段
typedef int seekdir;
enum seek_dir {
beg = 0x0,
cur = 0x1,
end = 0x2
};
那我想請問大大到底seekg的用法是如何去使用它呢?
根據help檔 它應該可以從檔案開始, 跟目前位置,及檔案結束位置來做不同的處理
|
rogan321
高階會員 發表:21 回覆:307 積分:200 註冊:2003-05-15 發送簡訊給我 |
Hi~newfbimod
我看了一下help基本上seekg(n)和seekg(n,seek_dir)雖然為多型,但是呼叫不同的函式來處理位移量
seekg(n)初期式呼叫pubseekpos()再呼叫seekpos()~
而seekg(n,seek_dir)呼叫pubseekoff()再呼叫seekoff()~
然後兩者皆傳回pos_type(n)函式的傳回值來決定旗標的位置~所以問題應該就是出在seekoff()這個函式你有興趣可以查看strstrea.cpp這個檔案它的主code就在這裡,我猜想是不同os的關係~像pubseekoff(off, dir, ios_base::in)這個字元位移的函式在LINUX下就有問題~而必須修正某些地方才能編譯~純屬推測~煩請先進不吝指正
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |