Directory.GetFiles 有效,Directory.GetDirectories 不在同一目录中

Posted

技术标签:

【中文标题】Directory.GetFiles 有效,Directory.GetDirectories 不在同一目录中【英文标题】:Directory.GetFiles works, Directory.GetDirectories doesn't on the same directory 【发布时间】:2009-05-01 08:10:55 【问题描述】:

我的 Web 应用程序上有一个简单的文件选择器,它使用 Directory.GetFiles 和 Directory.GetDirectories 来生成 UI。这在我的本地主机上完美运行,但是当我将它上传到我的 Windows Server 2003 主机时,我只能看到文件 - 在同一个目录上,GetFiles 有效,但 GetDirectories 无效。

代码非常简单 - 字符串 dir 由 Server.MapPath 调用创建,然后:

List<string> dirs = Directory.GetDirectories(dir).ToList();
List<string> files = Directory.GetFiles(dir).ToList();

我已经尝试了所有我能想到的安全方面的方法;甚至让“每个人”都可以完全访问网络根目录中的所有目录,即使这样也没什么区别。

因此,如果问题不在于安全性,我将非常感谢一些建议以尝试更多尝试!

更新:我很愚蠢 - 吐出 html 的代码包含一些非常古老的测试代码,这些代码对本地没有任何影响,因此没有被注意到和删除,但是这导致服务器上的每个目录都被忽略!那是什么?

if (!subDir.Contains("."))  ...

在服务器上,所有站点都位于由其域命名的文件夹中 - 在本地,它们不是。我==愚蠢。对不起大家!

【问题讨论】:

【参考方案1】:

目录是否隐藏?

它们是实际目录,还是(因为这是一个网络服务器)虚拟文件夹?

顺便说一句 - 除非您特别想要某些 List&lt;T&gt; 功能,否则您不妨将它们留在原始的 string[] 数组中...实际上,在 3.5 中,LINQ 模糊了 List&lt;T&gt; 的优势,因为 @987654324 @、First(...) 等适用于数组。

【讨论】:

【参考方案2】:

您是否检查过该目录是否在您认为的位置? IIS 通常可以将您放在一个临时目录中,因此它可能已将您的所有文件复制到此临时文件夹,但没有任何子目录,因此根本没有。

【讨论】:

【参考方案3】:

如果没有权限,可以强制抛出异常:

new FileIOPermission(FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read,dir).Demand();

【讨论】:

以上是关于Directory.GetFiles 有效,Directory.GetDirectories 不在同一目录中的主要内容,如果未能解决你的问题,请参考以下文章

c#如何获取某目录下的几种格式的图片文件。Directory.GetFiles

Directory.EnumerateFiles 与 Directory.GetFiles 有啥区别?

您可以使用多个过滤器调用 Directory.GetFiles() 吗?

Directory.GetFiles 不返回文件

Directory.GetFiles 返回重复的文件名

Directory.GetFiles()获取多个类型格式的文件