C++ builderbuild的程式是否有打開檔案I/O的限制?
不管是FILE* 或者是 HANDLE,打開40來個檔案之后,再打開檔案就失敗了。百思不得cb它姐啊,求解惑。
uj5u.com熱心網友回復:
打開檔案失敗回傳的錯誤碼是多少?uj5u.com熱心網友回復:
GetLastError回傳 183uj5u.com熱心網友回復:
183的錯誤碼表示ERROR_ALREADY_EXISTS,就是檔案已經存在。你是打開檔案還是在創建檔案?你把打開檔案的代碼發出來瞅瞅。uj5u.com熱心網友回復:
測驗代碼如下,很簡單的, num == 47 時出錯
string strFile = "D:\\Data\\";
int num = 0;
char chNum[20];
vector<FILE*> vFiles(0);
while(true)
{
sprintf(chNum,"%d",num);
num++;
string tmp = strFile + string(chNum);
tmp += ".txt";
FILE* fp = fopen(tmp.c_str(),"wt");
if (fp == NULL)
{
DWORD ErrorNo = GetLastError();
sprintf(chNum,"%d\0",ErrorNo);
ShowMessage(chNum);
}
vFiles.push_back(fp);
}
uj5u.com熱心網友回復:
C++Builder中, 默認用 fopen 同時打開的檔案數是有限制的: FOPEN_MAX 在 32 位下通常是 50 (實際不到50, 因為還有stdin/stdout/stderr), 64 位下可以是 512 個.建議換成Windows API: CreateFile 來操作。
uj5u.com熱心網友回復:
VS 沒看到有這個限制。有什么辦法可以在c++ builder上突破這個限制嗎?Windows Api 沒有這個限制。3q
uj5u.com熱心網友回復:
GCC和VC編譯器也有限制,默認可能是512,可以通過_setmaxstdio()來更改。在C++Builder中,我建議你用CreateFileuj5u.com熱心網友回復:
為什么呢?大神。uj5u.com熱心網友回復:
什么為什么?C++Builder里沒有_setmaxstdio()函式
uj5u.com熱心網友回復:
哦,我以為API 和 stdio之間有什么貓膩轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/104336.html
上一篇:連連看VC++代碼
下一篇:iOS_iOS14.0適配
