Re: [問題] fopen回傳null該怎麼辦
※ 引述《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
07/12 17:16, 1F
推
07/12 17:58, , 2F
07/12 17:58, 2F
→
07/13 03:22, , 3F
07/13 03:22, 3F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章