我希望以一种可以将它们与文件夹大小进行比较的方式获取值.
我们的想法是让一个程序在文件夹超过一定大小时发出警告,其大小由用户输入的字符串决定.
.net框架中是否有任何内置允许我解析1.5TB,400GB,1.9GB和0.5KB等字符串?
解决方法 这是一个简单的 Interpreter的好选择.像这样的代码是一个简单的开始,你需要处理更多的情况,并考虑套管的差异(例如Gb vs GB).
首先是上下文和表达式的定义:
public class fileSizeContext{ private string input; private long output; public fileSizeContext(string input) { this.input = input; } public string input { get; set; } public long Output { get; set; }}public abstract class fileSizeExpression{ public abstract voID Interpret(fileSizeContext value);}
然后定义终端表达式,以及所有变体:
public abstract class TerminalfileSizeExpression : fileSizeExpression{ public overrIDe voID Interpret(fileSizeContext value) { if(value.input.EndsWith(this.ThisPattern())) { double amount = double.Parse(value.input.Replace(this.ThisPattern(),String.Empty)); var fileSize = (long)(amount*1024); value.input = String.Format("{0}{1}",fileSize,this.NextPattern()); value.Output = fileSize; } } protected abstract string ThisPattern(); protected abstract string NextPattern();}public class KbfileSizeExpression : TerminalfileSizeExpression{ protected overrIDe string ThisPattern(){return "KB";} protected overrIDe string NextPattern() { return "bytes"; }}public class MbfileSizeExpression : TerminalfileSizeExpression{ protected overrIDe string ThisPattern() { return "MB"; } protected overrIDe string NextPattern() { return "KB"; }}public class GbfileSizeExpression : TerminalfileSizeExpression{ protected overrIDe string ThisPattern() { return "GB"; } protected overrIDe string NextPattern() { return "MB"; }}public class TbfileSizeExpression : TerminalfileSizeExpression{ protected overrIDe string ThisPattern() { return "TB"; } protected overrIDe string NextPattern() { return "GB"; }}
然后你添加一个非终端表达式(这可以完成大部分工作):
public class fileSizeParser : fileSizeExpression{ private List<fileSizeExpression> ExpressionTree = new List<fileSizeExpression>() { new TbfileSizeExpression(),new GbfileSizeExpression(),new MbfileSizeExpression(),new KbfileSizeExpression() }; public overrIDe voID Interpret(fileSizeContext value) { foreach (fileSizeExpression exp in ExpressionTree) { exp.Interpret(value); } }}
最后,这是一种客户端代码:
var ctx = new fileSizeContext("10Mb");var parser = new fileSizeParser();parser.Interpret(ctx);Console.Writeline("{0} bytes",ctx.Output); // 10485760 bytes
实例:http://rextester.com/rundotnet?code=WMGOQ13650
编辑.从Mb改为MB(一个是官方MegaByte,另一个是MegaBit).将int更改为long以考虑大尺寸.
总结以上是内存溢出为你收集整理的c# – 将“1.5TB”,“500MB”转换为单个文件大小的单位全部内容,希望文章能够帮你解决c# – 将“1.5TB”,“500MB”转换为单个文件大小的单位所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)