试图在Visual Studio项目中将文件大小转换为可读的-如何与我现有的代码结合

本文关键字:结合 代码 Studio Visual 项目 转换 文件大小 | 更新日期: 2023-09-27 17:49:21

我正在使用Visual Studio模型,并且我有一个显示文件名,文件大小和链接的"下载"页面。但是,我正在尝试将文件大小转换为可读格式。我已经找到了几种方法来做到这一点,但我认为我陷入困境的地方是如何将其合并到我已经使用的代码中。例如,我已经有了一个FileSize变量,所以我想把它合并到代码中进行转换。下面是模型本身的现有代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Web.Hosting;
namespace SupportToolkit.Models
{
public class DataClassesModel
{
    public List<FileNames> GetFiles()
    {
        List<FileNames> lstFiles = new List<FileNames>();
        DirectoryInfo dirInfo = new DirectoryInfo(HostingEnvironment.MapPath("~/Files"));
        int i = 0;
        foreach (var item in dirInfo.GetFiles())
        {
            lstFiles.Add(new FileNames()
            {
                FileId = i + 1,
                FileName = item.Name,
                FileSize = item.Length,
                FilePath = dirInfo.FullName + @"'" + item.Name,
                FileExtension = item.Extension
            });
            i = i + 1;
        }
        return lstFiles;
    }
}

public class FileNames
{
    public int FileId { get; set; }
    public string FileName { get; set; }
    public long FileSize { get; set; }
    public string FilePath { get; set; }
    public string FileExtension { get; set; }
    }
}

我想在这里添加一些代码来转换为KB, MB, GB等-我有一个想法,但不知道如何将其纳入我已经拥有的。下面是我使用转换的一个示例:

public static string FileSizeFormat(this long FileSize)
    {
        double size = FileSize;
        int index = 0;
        for (; size > 1024; index++)
            size /= 1024;
        return size.ToString("0.00 " + new[] { "B", "KB", "MB", "GB", "TB" }[index]);
    }

任何帮助都将非常感激!我对此很陌生,只是纠结于如何将这两件事融合在一起。:)

谢谢。

让我也添加在Index.html中使用的代码,也许这将有助于完成循环。我正试图弄清楚如何获得格式化的文件大小显示在这个页面上。谢谢你。

@using SupportToolkit.Models
@model IEnumerable<SupportToolkit.Models.FileNames>
@{
ViewBag.Title = "Index";
}
<h2>Downloads</h2>
<hr />
<table>
<tr>
    <th>
        File Name
    </th>
    <th>
        File Size
    </th>
</tr>
@foreach (var item in Model)
{
    <tr >
        <td>
            @Html.DisplayFor(modelItem => item.FileName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.FileSize)
        </td>
        <td>
            <p style="text-indent: 5em;">
                @Html.ActionLink("Download", "Download", new { id = item.FileId })
            </p>
        </td>
    </tr>
}

在本例中,我使用@Html。DisplayFor(modelItem => item.FileSize)显示文件大小。但这并不包括格式。我如何使它成为格式化的文件大小(人类可读)?

试图在Visual Studio项目中将文件大小转换为可读的-如何与我现有的代码结合

看起来您将FileSizeFormat定义为long的扩展方法。

在这种情况下,你可以调用,例如,lstFiles[0].FileSize.FileSizeFormat(),它将返回可读字符串。

不要忘记添加using XXX,其中XXX是您定义FileSizeFormat方法的命名空间。

考虑将FileSizeFormat重命名为ToReadableFileSize()。它会让你的代码更"可读"- lstFiles[0].FileSize.ToReadableFileSize() .

花了好长时间才明白。我想我会把它贴出来,这样其他人就可以从中学习,因为他们可能有同样的学习曲线。;)

我只修改了一行代码。在模型本身中:

FileSize = item.Length,

现在写着:

FileSize = FileSizeFormat(item.Length),

我还从公共字符串中删除了静态,因为它不需要。

其他都不需要改变。就是这样。谢谢!