c# – 将“1.5TB”,“500MB”转换为单个文件大小的单位

c# – 将“1.5TB”,“500MB”转换为单个文件大小的单位,第1张

概述我想允许用户使用任何标准后缀(例如TB,MB,GB)输入文件大小 我希望以一种可以将它们与文件夹大小进行比较的方式获取值. 我们的想法是让一个程序在文件夹超过一定大小时发出警告,其大小由用户输入的字符串决定. .net框架中是否有任何内置允许我解析1.5TB,400GB,1.9GB和0.5KB等字符串? 这是一个简单的 Interpreter的好选择. 像这样的代码是一个简单的开始,你需要处理更多 我想允许用户使用任何标准后缀(例如TB,MB,GB)输入文件大小

我希望以一种可以将它们与文件夹大小进行比较的方式获取值.

我们的想法是让一个程序在文件夹超过一定大小时发出警告,其大小由用户输入的字符串决定.

.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”转换为单个文件大小的单位所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1240826.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存