Re: [問題] fopen回傳null該怎麼辦

看板C_and_CPP (C/C++)作者 (有趣生活)時間16年前 (2009/07/12 17:10), 編輯推噓2(201)
留言3則, 3人參與, 最新討論串3/3 (看更多)
※ 引述《QQ29 (我愛阿蓉)》之銘言: : 大家好 : 是這樣的.... 我目前自己寫的程式 想到別台電腦上跑 : 因為不是什麼大程式 只不過讀寫檔案而已 自己的電腦跑是OK的不會出錯 : 丟到另一台舊電腦 也是可以跑沒有錯誤 : 問題就在我丟到另一台電腦 他卻會出現assertion fail ... : fwrite.c : Expression: (stream!=NULL) : _VALIDATE_RETURN( (stream != NULL), EINVAL, -1); : 是出現在下面這段 : FILE * pFile; : pFile=fopen("C:\\test.bin","wb"); : fwrite(...,...,...,pFile); : 我發現pFile得到fopen的return值後 會是null.... : 沒道理阿= = : 我找不出錯誤 只能想說三台電腦平台上的差異 就是壞掉的這台是vista 32bit : 可是為什麼會一直return null... : 請問有人知道是什麼原因嘛? : 謝謝 因為 Vista 上每個程式有所謂的 integrity level(IL) 平常直接執行一個程式時,預設 IL=Medium 以系統管理員身份執行時, IL=High (就是 UAC 視窗選取 "允許" 之後) IL=Medium 時 程式不能寫入系統磁碟根目錄、還有一些系統資料夾如 Windows, Program Files 如果程式有啟動虛擬化,程式則會以為寫入是成功的 但實際上是被 OS 導向寫到別的位置去 (寫入根目錄的 case 例外,就算有虛擬化,fopen 還是會回傳失敗) 所以有在 Vista 上重新設計過的軟體安裝程式 為了要能正確寫入到 Program Files 資料夾,都會要求 IL=High 也就是跳 UAC 詢問是否允許 (也就是 Vista 使用者嫌煩的那個..做什麼都要跳出來問的視窗XD) 如果你是直接把測試程式 exe 拿去 Vista 上跑 就在檔案總管選那個 exe,按滑鼠右鍵選取「以系統管理員身份執行」 那個 C:\test.bin 應該就會成功建出來了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.126.2.150

07/12 17:16, , 1F
記得連 sysinternal 的軟體開來看看,都覺得很麻煩
07/12 17:16, 1F

07/12 17:58, , 2F
應該要推一下這篇:p
07/12 17:58, 2F

07/13 03:22, , 3F
沒事我也不會開procexp了..XD有程式卡住就工作管理員關它
07/13 03:22, 3F
文章代碼(AID): #1AMQXeKX (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AMQXeKX (C_and_CPP)