正如你们许多人所知,System.IO命名空间设计得非常糟糕。我想要一个免费的库,以一种理智的方式包装文件IO功能(读取:不要求你在整个地方传递字符串)。我记得前一段时间读过这些库中已经写了一小部分(并且作者对此没有更多感到惊讶)。我认为这是devlicious或codebetter或Los Techies中的其中一个人做过其中一个人。
有谁知道我在谈论什么或另一个好的文件IO包装器?
编辑:我想我应该指定我做测试驱动开发,我的担忧主要(但不完全)围绕System.IO的测试友好性。
答案 0 :(得分:3)
System.IO.FileInfo有什么问题?
我很好奇,所以开始使用ReSharper创建一组包装器。它花了我16分钟,我没有测试过,也不知道它是否符合你的需求。不过,我想我会概述我使用的过程:
结果是包含相应类的方法和属性的接口,以及委托给原始类并实现接口的具体类。然后,您应该能够创建自己的模拟类,并更改代码以使用接口,而不是直接使用System.IO具体类。
答案 1 :(得分:3)
我认为您正在寻找this question和this blog post。 我只包装了System.IO.File和System.IO.Directory。没有FileInfo或其他东西。
答案 2 :(得分:2)
我很好奇System.IO
命名空间的设计是如此糟糕。当然,选择一个特定的接口或类可能有点武断,但我不熟悉必须在整个地方传递字符串的问题。
也许您可以提供有关您的特定问题的更多信息?
修改强>
您似乎表明您希望构建在System.IO
命名空间上的类允许您在不写入文件系统的情况下进行测试。我没有看到如何在没有它的情况下充分测试写入文件系统的函数,以及写入文件系统。如果您想从写作角度测试您的逻辑,那么允许您使用System.IO.Stream
或System.IO.TextWriter
,以更合适的方式。这样您就可以测试代码的各个组件,而不会产生任何外部影响;只需传递System.IO.MemoryStream
而不是System.IO.FileStream
。显然,您不会遇到诸如空间不足,访问被拒绝等问题,但如果不对文件系统进行实时运行,您将无法遇到这些错误。这就是为什么你可以公开带有System.IO.FileInfo
或字符串路径(或任何你需要的数组/ IEnumerable<>
)的外部函数,它们可以提供另一个级别的测试。
System.IO
名称空间填充得非常好,而且我从未遇到过使用过的非OO方法。
答案 3 :(得分:2)
答案 4 :(得分:0)
http://systemwrapper.codeplex.com提供了一套非常全面的适配器。你会发现几乎所有的System.IO都被包装了,还有很多其他的System命名空间(如果你正在使用时间敏感的计算,包装DateTime类总是一个很好的举动。)