可以在 C# 中打开的最大文件数是不是有限制?

Posted

技术标签:

【中文标题】可以在 C# 中打开的最大文件数是不是有限制?【英文标题】:Is there a limit on the maximum number of files that can be opened in C#?可以在 C# 中打开的最大文件数是否有限制? 【发布时间】:2013-11-29 16:03:03 【问题描述】:

我正在制作一个应用程序,它需要同时打开至少 676 个文件,最多 1400 个文件。我将使用StreamWriter 类写入这些文件,并使用StreamReader 类读取数据。那么,就像下面链接中描述的 VC++ 一样,可以同时打开以在 C# 中读取或写入的文件数量是否有最大限制。 Is there a limit on number of open files in Windows。

【问题讨论】:

你是在达到极限还是只是在尝试任何事情之前先问一下? 您能解释一下为什么需要这样做吗?你的问题没有错,只是出于我自己的好奇! 那么为什么不尝试同时打开 1400 个文件并自己找出答案呢? 我觉得JMK的任务是什么,我也很感兴趣。 @Voidpaw 我不是在说OpenFileDialog,我说的是分别使用StreamReaderStreamWriter 对文件进行“读取”和“写入”。 【参考方案1】:

.NET 打开文件的上限受 Win32 API CreateFile 的限制,即 16384。

【讨论】:

【参考方案2】:

这对我有用:

  var streams = new Stream[10000];
  for (var i = 0; i < streams.Length; i++) 
    streams[i] = File.OpenWrite(Path.Combine(Path.GetTempFileName()));
    streams[i].WriteByte((byte)'A');
  
  var tasks = new Task[streams.Length];
  for (var i = 0; i < streams.Length; i++) 
    var index = i;
    tasks[i] = new Task(() => 
      streams[index].WriteByte((byte)'B');
    );
    tasks[i].Start();
  
  Task.WaitAll(tasks);
  for (var i = 0; i < streams.Length; i++) 
    streams[i].Close();
  

【讨论】:

以上是关于可以在 C# 中打开的最大文件数是不是有限制?的主要内容,如果未能解决你的问题,请参考以下文章

Linux中最大进程数和最大文件数

怎样查看linux进程打开的文件数

Linux 下最大文件数等限制

GDAL的最大波段数限制及最大文件数限制

GDAL的最大波段数限制及最大文件数限制

GDAL的最大波段数限制及最大文件数限制