[問題] fopen讀相同檔名 (已解決)

看板C_and_CPP (C/C++)作者 (totem)時間10年前 (2015/05/31 17:54), 10年前編輯推噓0(0012)
留言12則, 3人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) code::block 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) matlab 問題(Question): fopen對於同樣的檔名不會自動讀最新的 餵入的資料(Input): matlab生成一筆data 名稱叫point.txt 預期的正確結果(Expected Output): fopen讀最新的一筆data 錯誤結果(Wrong Output): 還是停留在上一筆data 程式碼(Code):(請善用置底文網頁, 記得排版) float z; int k; FILE *fptr; if((fptr=fopen("point.txt","r"))!=NULL) { for (k=0;k<3200;k++){ fscanf(fptr,"%f",&z); input[k] = z; printf("%f\n",input[k]); } } fclose(fptr); 補充說明(Supplement): 就是我因為方便,所以每次在matlab調變參數後的結果,都存在point.txt這個檔案 反正相同檔名就意同直接把舊的覆蓋 所以我以為C的fopen也是會直接讀最新的point.txt 結果後來檢驗過程中還是只讀到上一筆已經被覆蓋掉的point.txt 自行解決的方法就是在matlab存成檔案的時候就存成不同名字,這樣C就可以讀到 但是麻煩點就在這樣每次存檔案,讀取檔案都要手動改檔案名稱 謝謝大大 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.228.236.142 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1433066088.A.729.html

05/31 21:10, , 1F
這情況蠻有趣的. 可以請問詳情嗎. 例如你怎麼知道有覆蓋
05/31 21:10, 1F
matlab會生成一個新的txt檔阿~ 只要看txt檔裡的資料有沒有變 甚至看"txt"的時間就知 道有變化啦~~ 我的matlab部分code : save('point.mat','point'); fid = fopen('C:\Users\totem\Desktop\filter_project\point.txt', 'a'); fprintf(fid, '%f \n', point ); fclose(fid); ※ 編輯: totemist (36.228.236.142), 05/31/2015 21:52:58

05/31 22:04, , 2F
你 C 的部分是獨立程式? 在 Matlab "後" 執行?
05/31 22:04, 2F
對對對 一切皆由手動操作 不是一次搞定的!!! 抱歉這部分我沒說清楚!!! 步驟如下 1. matlab生成一個名為point.txt的檔案 2. 手動切換到C去讀取這個point.txt

05/31 22:13, , 3F
聽起來像是 c 那裡要收到通知或延遲或其他機制再讀檔
05/31 22:13, 3F
抱歉 這部分我沒說清楚 ※ 編輯: totemist (36.228.236.142), 05/31/2015 22:17:58

05/31 23:11, , 4F
雖然感覺不太可能..matlab 產生的 point.txt , 和 C 讀到
05/31 23:11, 4F

05/31 23:12, , 5F
的 point.txt , 確定是同一個(路徑是一樣的)嗎?
05/31 23:12, 5F
一樣的,因為我其實都是有直接設路徑,只是貼code把這部份去掉

05/31 23:12, , 6F
另外小挑一下下,fclose 要放在 if 裡面.
05/31 23:12, 6F
好的,謝謝提醒 已改

05/31 23:37, , 7F
意思是你 Matlab 跑完->打開point.txt 是新的-> C開起來是舊
05/31 23:37, 7F

05/31 23:38, , 8F
的?
05/31 23:38, 8F
是的,沒錯。 ※ 編輯: totemist (36.228.236.142), 06/01/2015 04:25:46

06/01 05:04, , 9F
matlab不太熟 不過fopen的'a'是append 每次新資料都寫在
06/01 05:04, 9F

06/01 05:05, , 10F
檔案最後 而讀取則是從頭讀 所以每次都會讀到前3200筆一樣
06/01 05:05, 10F

06/01 05:05, , 11F
的資料
06/01 05:05, 11F

06/01 05:08, , 12F
所以我猜應該是像F大猜想的 沒有"覆蓋"
06/01 05:08, 12F
!!!!! 我今天又再看一次 !!! 沒錯,你和F大是對的!!! 他並沒有覆蓋前3600筆資料,而是加在3600筆資料後,我這才發現昨天測試的txt檔裡有破 萬筆data!!! 謝謝 兩位 我大該知道該怎麼處理了!! ※ 編輯: totemist (36.228.236.142), 06/01/2015 16:48:46 修正成功!!! 只要把'a'改成'w+t'就可以了!!! 昨天既然被困惑了!!! 謝謝大大們的提點~ ※ 編輯: totemist (36.228.236.142), 06/01/2015 16:53:55
文章代碼(AID): #1LQjfeSf (C_and_CPP)
文章代碼(AID): #1LQjfeSf (C_and_CPP)