c - 打开文件太多 : File IO in C on Windows

标签 c windows io

我有以下代码,它只是打印一些文本和一个变量到文件中。我收到错误“打开的文件太多”。我在 VS2010 中使用 Windows 上的 C。

int i, count = 0;
FILE *f;
int _x, _y, _z, _x2, _y2, _z2;

for (i = 0; i < HEIGHT * WIDTH*3; i+= 3)
{
    if (buffer1[i/3] < MAGIC_VALUE)
    {
        count++;
    }

    if (buffer2[i/3] < MAGIC_VALUE)
    {
        count++;
    }
}

printf("Count = %d\n", count); // prints correctly...
f = fopen("file.abc", "w"); // f == NULL. perror gives "Too many open files"
fprintf(f, "lots\n of\n text\n");
fprintf(f, "count: %d\ntext \ntext y\ntext text text", count); 
fprintf(f, "\nend");

fclose(f);

当它运行时,除了 Visual Studio 之外,我没有打开任何东西。

最佳答案

如果你打开的文件太多,这与控制打开句柄或类似内容的环境变量有关——我相信从很久以前的内存来看——这与控制打开句柄的环境变量有关。我正在寻找您的答案,如果找到,我会发布它。这是一个好问题。我同意其他评论,即不断调用 fopen(如果确实发生了这种情况),无论环境变量设置有多大,都会导致此问题。

编辑:

我的内存可能会回到 16 位 Windows。认罪。

关于c - 打开文件太多 : File IO in C on Windows,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5607765/

相关文章:

c++ - 如何使用 C++ 以编程方式更新组策略?

java - 如何在文件的特定行之后插入文本

c - 添加或减去表示为字符串的两个数字,而不使用 int、double、long、float 等

windows - 从 %%i 变量获取文件名

c - 如果我忘记关闭扫描集会怎样?

c++ - 为什么只检查某些值的错误? (C++?)

shell - 我可以获取一个输出流,用 tee 复制它,复制其中一个,然后将两者作为输入返回到 diff 中吗?

asp.net - ASP.NET 中的线程、TPL 与异步委托(delegate)

c - scanf 接受一个带空格的字符串,然后接受一个 char

c - #include "~/file_name"无法编译