试图在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)显示文件大小。但这并不包括格式。我如何使它成为格式化的文件大小(人类可读)?
看起来您将FileSizeFormat
定义为long
的扩展方法。
在这种情况下,你可以调用,例如,lstFiles[0].FileSize.FileSizeFormat()
,它将返回可读字符串。
不要忘记添加using XXX
,其中XXX
是您定义FileSizeFormat
方法的命名空间。
考虑将FileSizeFormat
重命名为ToReadableFileSize()
。它会让你的代码更"可读"- lstFiles[0].FileSize.ToReadableFileSize()
.
花了好长时间才明白。我想我会把它贴出来,这样其他人就可以从中学习,因为他们可能有同样的学习曲线。;)
我只修改了一行代码。在模型本身中:
FileSize = item.Length,
现在写着:
FileSize = FileSizeFormat(item.Length),
我还从公共字符串中删除了静态,因为它不需要。
其他都不需要改变。就是这样。谢谢!