- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
到目前为止,我创建了以下接口(interface):
public interface IDirectoryInfoWrapper
{
public IFileInfoWrapper[] GetFiles(string searchPattern, SearchOption searchType);
public IDirectoryInfoWrapper[] GetDirectories();
}
我一直在研究用 IDirectoryInfoWrapper
替换 DirectoryInfo 的代码。一切顺利,直到我发现这个:
// Check that the directory is valid
DirectoryInfo directoryInfo = new DirectoryInfo( argPath );
if ( directoryInfo.Exists == false )
{
throw new ArgumentException
("Invalid IFileFinder.FindFiles Directory Path: " + argPath);
}
将构造函数放在接口(interface)中是没有意义的,那么我应该如何处理这行代码:
DirectoryInfo directoryInfo = new DirectoryInfo( argPath );
最佳答案
我看到两个明显的选择:
DirectoryInfo
替换为您自己的包装实现(不理想)IDirectoryInfoWrapper
实例的工厂。您可以创建一个 Create
函数,为您要使用的每个构造函数重载。我假设您使用依赖注入(inject)来执行此操作,这意味着现在您只需将该工厂注入(inject)到任何需要创建新目录信息对象的类中即可。
此外,您可能希望修改包装器接口(interface)以公开该 Exists
属性
编辑:如果你这样做是为了尝试对某些东西进行单元测试(这似乎很可能),那么你可以尝试阅读 Misko Hevery .每次在 C# 中使用 new
运算符时,都会遇到无法在运行时注入(inject)某些内容的问题。这使得除了最微不足道的情况外,很难使用 new
测试任何东西。对于任何不是简单数据对象的东西,我几乎总是使用工厂。
编辑二:
您将构造委托(delegate)给工厂,因此您可以在此处使用 DirectoryInfo
真正的构造函数:
class Factory : IFactory
{
IDirectoryInfoWrapper Create(string arg)
{
var dirInfo = new DirectoryInfo(arg);
var wrapper = new DirectoryInfoWrapper(dirInfo);
return wrapper;
}
}
关于c# - 如何模拟 DirectoryInfo 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11159661/
K:\test 中存在空目录“New Folder” >$a = gci K:\test目录不应具有 Length 属性。让我们检查: [bool]($a.PSobject.Properties.Na
如何将新目录添加到列表中 public static List Directory = new List(); Directory.Add("C:\\test"); // error 'string
这一定很愚蠢,但我就是不明白。所以我有这段代码: var dir = new DirectoryInfo("somedir"); if (dir.Exists) { dir.Delete(tru
我遇到了奇怪的事情。 每当我尝试在代码中创建DirectoryInfo对象并将其传递给根驱动器(C:)时,该对象的Name属性都设置为“ Debug”,并且Parent设置为{bin}文件夹。 我不经
我正在使用 Dictionary,使用 DirectoryInfo 和 FileInfo 等对象作为键。以这种方式使用它们安全吗?如何确保可以通过这种方式安全地使用对象类型? 最佳答案 一般来说,要准
我正在使用 DirectoryInfo.GetDirectories()递归查找给定路径下的所有子目录。 但是,我想排除 System 文件夹,并且没有明确的方法。 在 FindFirstFile/F
我有一个应用程序,它必须枚举一些文件夹并处理其中的文件。 它必须支持恢复,这意味着它必须从上次处理的文件夹开始。 我正在考虑使用 the DirectoryInfo.EnumerateDirector
我在以下代码段中遇到行为差异 DirectoryInfo di = new DirectoryInfo("c:\"); FileInfo[] textFiles = di.GetFiles("log_
我正在尝试查询文件夹并仅返回具有数字文件夹名称的文件夹。问题是我需要在 DirectoryInfo[] 对象中使用它。 我可以这样做(而且有效): List subDirList = Director
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我还是 C# 的新手...我正在构建一个 WPF 应用程序,我正在尝试应用一些用户应用程序设置。插入标准应用程序设置(int、double、string 等)很容易。我什至插入了 WindowStat
我想阅读文件夹和文件名,它们被放入一个列表中,并排序显示例如,我有一个如下所示的文件: 1-4999.txt 5000-9999.txt…… 我想对数据文件夹进行排序 var endpa
在我问的问题中Retrieve a list of filenames in folder and all subfolders quickly还有一些我发现的,似乎搜索许多文件的方法是使用 Enum
我正在使用 DirectoryInfo.CreationTime 来获取目录的创建日期但是它返回奇怪的日期 {21/11/1617 0:00:00} var directoryInfo = new D
如果我声明的目录不存在或已更改,DirectoryInfo 如何知道在哪里创建新目录?因为 Create() 方法不带参数。 像 Directory.CreateDirectory(path),其中路
我已经搜索了大约一个小时,但还是找不到解决我问题的方法。除了以“_days.txt”结尾的文件之外,我正在尝试显示某个目录中的所有 .txt 文件。这是我的代码,希望你能有所帮助。谢谢! foreac
我有以下代码可以正常工作。我想要做的(一次)是检查目录是否存在,如果存在,我想检查文件夹中是否存在文件。如果是,则返回 Y,否则返回 N: string s = new DirectoryInfo("
我正在测试以查看 DirectoryInfo[] 是否包含目录我的代码在下面 DirectoryInfo[] test = dir.GetDirectories(); if(test.Contains
我只是用我自己的文件夹浏览器做一些试验。我注意到当我查看 Windows 7 中的 System32 文件夹时,我得到了一些奇怪的结果。这是代码: DataTable dt=new DataTable
当我递归浏览一些文件夹和文件时,我遇到了这个错误: 指定的路径、文件名或两者都太长。完全限定文件名必须少于 260 个字符,目录名必须少于 248 个字符。 这是我的功能 private void P
我是一名优秀的程序员,十分优秀!