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<T>
功能,否则您不妨将它们留在原始的 string[]
数组中...实际上,在 3.5 中,LINQ 模糊了 List<T>
的优势,因为 @987654324 @、First(...)
等适用于数组。
【讨论】:
【参考方案2】:您是否检查过该目录是否在您认为的位置? IIS 通常可以将您放在一个临时目录中,因此它可能已将您的所有文件复制到此临时文件夹,但没有任何子目录,因此根本没有。
【讨论】:
【参考方案3】:如果没有权限,可以强制抛出异常:
new FileIOPermission(FileIOPermissionAccess.PathDiscovery | FileIOPermissionAccess.Read,dir).Demand();
【讨论】:
以上是关于Directory.GetFiles 有效,Directory.GetDirectories 不在同一目录中的主要内容,如果未能解决你的问题,请参考以下文章
c#如何获取某目录下的几种格式的图片文件。Directory.GetFiles
Directory.EnumerateFiles 与 Directory.GetFiles 有啥区别?