可以在 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
,我说的是分别使用StreamReader
和StreamWriter
对文件进行“读取”和“写入”。
【参考方案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# 中打开的最大文件数是不是有限制?的主要内容,如果未能解决你的问题,请参考以下文章