2016-06-26 3 views
0

Je travaille avec un modèle Visual Studio et j'ai une page pour "téléchargements" qui affiche le nom du fichier, la taille du fichier et un lien. Cependant, j'essaye de convertir la taille de fichier dans un format lisible. J'ai trouvé plusieurs méthodes pour le faire, mais je pense que je suis coincé sur la façon d'intégrer cela dans le code que j'utilise déjà. Par exemple, j'ai déjà une variable FileSize, donc je veux l'incorporer dans le code pour la conversion. Voici mon code existant pour le modèle lui-même:Essayer de convertir la taille de fichier en projet lisible dans Visual Studio - comment combiner avec mon code existant

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; } 
    } 
} 

Je veux ajouter un peu de code ici pour faire la conversion en Ko, Mo, Go, etc. - et j'ai une idée, mais je ne sais pas comment l'incorporer dans ce que j'ai déjà. Voici un exemple de ce que je vais faire avec la conversion:

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]); 
    } 

Toute aide serait grandement appréciée! Je suis très nouveau à ce sujet et je suis juste coincé sur la façon de mélanger ces deux choses ensemble. :)

Merci. Permettez-moi également d'ajouter le code utilisé dans Index.html, peut-être que cela aidera à compléter le cercle. J'essaie de comprendre comment afficher la taille du fichier formaté sur cette page. Je vous remercie.

@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> 
} 

Dans ce cas, je me sers @ Html.DisplayFor (ModelItem => item.FileSize) pour afficher la taille du fichier. Mais cela n'inclut pas le formatage. Comment est-ce que je ferais ceci la taille de fichier formatée (humain-lisible)?

+0

Copie possible de [Comment puis-je obtenir une taille de fichier lisible par un utilisateur en utilisant l'abréviation by .NET?] (Http://stackoverflow.com/questions/281640/how-do-i-get-a-human readable-file-size-in-bytes-abbreviation-using-net) –

+0

Je comprends comment obtenir la taille de fichier lisible par l'homme.Ce que je ne comprends pas, c'est comment l'incorporer dans le code que j'utilise déjà. J'ai été très clair sur l'explication de cela. En fait, le lien que vous avez posté je crois est où j'ai obtenu le code à utiliser pour la façon de convertir la taille du fichier. Ce n'est pas le problème. Le problème est que je cherche des conseils sur la façon de combiner cette méthode avec le code que j'ai déjà écrit. J'ai posté mon code existant et la méthode que je veux utiliser pour la conversion. La question est comment puis-je les utiliser ensemble? – LilithGoddess

+0

Spécifiquement - comment est-ce que je prends le "FileSize = item.length" que j'utilise déjà et le convertis en lisible par l'homme? Comment mon code actuel intégrerait-il la conversion? – LilithGoddess

Répondre

0

On dirait que vous avez défini FileSizeFormat comme une méthode d'extension de long.

Dans ce cas, vous pouvez appeler, par exemple, lstFiles[0].FileSize.FileSizeFormat() et retourner la chaîne lisible.

N'oubliez pas d'ajouter using XXXXXX est l'espace de noms où vous avez défini la méthode FileSizeFormat.

Envisager de renommer FileSizeFormat en ToReadableFileSize(). Il rendra votre code plus 'lisible' - lstFiles[0].FileSize.ToReadableFileSize().

+0

Merci - donc, ma question est. Actuellement, dans index.html, la façon dont j'affiche la taille du fichier dans une table est en utilisant "@ Html.DisplayFor (modelItem => item.FileSize)". Cela fonctionne bien, sauf ne contient pas le formatage. Donc j'ai pensé que je pourrais utiliser "@ Html.DisplayFor (modelItem => item.FileSize.FileSizeFormat)" pour inclure le formatage, mais cela ne compile pas. Est-ce que je fais cela incorrectement? – LilithGoddess

0

Compris, après beaucoup de temps. Figuré je posterais juste pour que d'autres puissent en tirer des leçons qui pourraient avoir la même courbe d'apprentissage. ;)

J'ai changé juste une ligne de code. Dans le modèle lui-même:

FileSize = item.Length, 

lit maintenant comme suit:

FileSize = FileSizeFormat(item.Length), 

I a également supprimé la statique, de la chaîne publique, car il n'a pas été nécessaire.

Rien d'autre ne devait changer. C'est tout. Merci!