0

我正在使用 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) 来显示文件大小。但这不包括格式。我如何将其设为格式化文件大小(人类可读)?

4

2 回答 2

0

想通了,过了很久。想我会发布,以便其他人可以从中学习,可能具有相同的学习曲线。;)

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

FileSize = item.Length,

现在读到:

FileSize = FileSizeFormat(item.Length),

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

没有其他东西需要改变。而已。谢谢!

于 2016-06-26T21:56:19.920 回答
0

看起来您定义FileSizeFormatlong.

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

不要忘记添加您定义方法的命名空间在using XXX哪里。XXXFileSizeFormat

考虑重命名FileSizeFormatToReadableFileSize(). 它将使您的代码更“可读” - lstFiles[0].FileSize.ToReadableFileSize()

于 2016-06-26T18:36:09.930 回答