我们正在开发一个针对从Windows XP SP 3到Windows 8的每个操作系统的应用程序。用户可以触发一些操作,导致将文件存储在硬盘上。目前,我们正在为每个操作创建用户在特定目标文件夹中执行具有唯一名称的文件夹。
目前的结构如下:
MyTargetFolder
|
|-- 0f8fad5b-d9cb-469f-a165-70867728950e
| |--- SomeFile.txt
| |--- AnotherFile.txt
|
|-- 7c9e6679-7425-40de-944b-e07fc1f90ae7
| |--- SomeFile.txt
| |--- AnotherFile.txt
.
.
我想知道,如果有特定的最大文件夹数量,可以存储在另一个文件夹中 - 可能依赖于操作系统,可能依赖于文件系统(Fat32,NTFS,......?)。
Directory.CreateDirectory
从我的C#应用程序创建文件夹并且已达到最大文件夹数量时会发生什么?这样的事情:
MyTargetFolder
|
|-- AllFoldersStartingWith0
| |
| |-- 0f8fad5b-d9cb-469f-a165-70867728950e
| |--- SomeFile.txt
| |--- AnotherFile.txt
|
|-- AllFoldersStartingWith7
| |
| |-- 7c9e6679-7425-40de-944b-e07fc1f90ae7
| |--- SomeFile.txt
| |--- AnotherFile.txt .
.
(注意:当然我们在生产中有两个以上的文件夹,因为用户执行的每个操作都会创建一个文件夹,我们将GUID作为foldernames。)
答案 0 :(得分:0)
每个Windows版本对于它可以存储在一个特定文件夹中的项目[文件+文件夹]的数量有自己的限制。虽然这个限制随着x64位系统的增加而增加,但与原始性能相比,数字本身不再是问题。随着特定文件夹中[文件或文件夹]的项目数量的增加,Windows似乎变得极其缓慢。你肯定需要考虑[或重新思考]访问这些文件的策略。
答案 1 :(得分:0)
如果直接进入NT内核API,10m项目目录执行得很好,并且有32767字符路径限制而不是260.您还不需要将文件名存储为GUID,因为NTFS将直接存储和索引您的文件为你的GUID,即在记事本中打开一个路径,你只需输入音量guid和文件guid,它“只是工作”。唯一的缺点是你不能选择我相信的GUID,因为NTFS会为你分配它。有关直接GUID功能的更多信息,请访问http://blogs.msdn.com/b/oldnewthing/archive/2011/02/28/10134679.aspx。
您现在可能会担心直接与NT内核交谈的麻烦。如果是这样,您可能会发现使用Boost.AFIO(https://boostgsoc13.github.io/boost.afio/doc/html/afio.html)。免责声明:我是作者。