c++ builder建立的工程下想同時打開56個檔案,簡單代碼 如下:
FILE * p[56] ;
int i ;
AnsiString str ;
for(i=0;i<56;i++)
{
str = IntToStr(i)+ ".txt" ;
if ((p[i] = fopen(str.c_str(), "wt"))
== NULL)
{
ShowMessage(str) ;
return ;
}
}
str = str + "完成" ;
ShowMessage(str) ;
發現 只能打開 47 個檔案 。
請問 各位大俠,這是在哪里給限制了?
可以去除這個限制嗎?
謝謝。
uj5u.com熱心網友回復:
檢查一下錯誤碼吧,或者用CreateFile再試試,以前打同時開過幾百個檔案都沒問題uj5u.com熱心網友回復:
檢查一下,是否這個檔案已經被其他程式打開或鎖定uj5u.com熱心網友回復:
函式功能:打開一個檔案函式原型:FILE * fopen(const char * path,const char * mode);
相關函式:open,fclose,fopen_s[1],_wfopen
所需庫:<stdio.h>
回傳值:檔案順利打開后,指向該流的檔案指標就會被回傳。如果檔案打開失敗則回傳NULL,并把錯誤代碼存在error 中。
用 getlasterror讀取看是什么錯誤
uj5u.com熱心網友回復:
加入下面陳述句:
error = GetLastError() ;
回傳值 error = 183 ;
(183)-當檔案已存在時,無法創建該檔案。
可是根本沒有47.txt這個檔案存在啊? 怎么不能創建?
uj5u.com熱心網友回復:
各位大俠 幫忙看看吧 呵呵 謝謝啊uj5u.com熱心網友回復:
換一組檔案名試試?uj5u.com熱心網友回復:
改名字 也不行啊。我嘗試了一下如下的代碼:
for(i=0;i<56;i++)
{
str = "FileNumber" + IntToStr(i)+ ".txt" ;
if ((p[i] = fopen(str.c_str(), "wt"))
== NULL)
{
error = GetLastError() ;
ShowMessage(str) ;
return ;
}
fclose(p[i]) ;
}
str = str + "完成" ;
ShowMessage(str) ;
當加上 fclose(p[i]) 時, 就可以打開55 個檔案
說明 檔案名 應該沒啥問題?
就是哪里有個同時打開檔案最大值的限制。
請問各位大俠 :給點指點 ?謝謝
uj5u.com熱心網友回復:
檢查C:\WINDOWS\system32\CONFIG.NT里面的設定看看?uj5u.com熱心網友回復:
_getmaxstdio 獲取最大打開檔案數_setmaxstdio 設定最大打開檔案數
uj5u.com熱心網友回復:
老大,這兩個函式 是包含在 stdio.h 里嗎?
c++ builder 中 編譯不過去啊?
E2268 Call to undefined function '_getmaxstdio'
uj5u.com熱心網友回復:
查了一下,這兩個函式vc里有,CB里面沒找到,CB的stdio.h里好像是_NFILE_宏,初始值是50,好像也不太好改不行就用CreateFile試試吧
uj5u.com熱心網友回復:
這個 openfile 應該也可以打開100個以上的檔案吧? 到底問題出在哪里呢uj5u.com熱心網友回復:
看看這個函式 int _setmaxstdio(int newmax
);
我也遇到了這個問題,就是檔案打開數目限制,如果txt檔案能打開五百多個,不同型別檔案上限不一樣,可以通過上面那個函式設定, newmax貌似最大也只能去 2048. 也可以看看下面的連接
http://technet.microsoft.com/zh-cn/interopmigration/6e3b887c
uj5u.com熱心網友回復:
必需的頭 檔案
stdio.h
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/151520.html
標籤:基礎類
下一篇:求c/c++大神賜教!
