Advertisement
frnathan13

PackageFile.cs

Jun 27th, 2017
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.52 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.IO;
  6. using System.Diagnostics;
  7. using System.Security.Cryptography;
  8.  
  9. namespace SimplePackager.Core {
  10.     public class PackageFile {
  11.  
  12.         public PackageFile() {
  13.             Directories = new List<PackageEntryDirectory>();
  14.             Directories.Add(new PackageEntryDirectory() { Name = "/" });
  15.  
  16.             Files = new List<PackageEntryFile>();
  17.         }
  18.  
  19.         private string ComputeHash(byte[] data) {
  20.             return Convert.ToBase64String(SHA1.Create().ComputeHash(data));
  21.         }
  22.  
  23.         /// <summary>
  24.         /// Directories
  25.         /// </summary>
  26.         public List<PackageEntryDirectory> Directories { get; set; }
  27.  
  28.         /// <summary>
  29.         /// Files
  30.         /// </summary>
  31.         public List<PackageEntryFile> Files { get; set; }
  32.  
  33.         public void CreateDirectory(string name) {
  34.             if (Directories.First(d => d.Name == name) == null) {
  35.                 Directories.Add(new PackageEntryDirectory() { Name = name });
  36.             }
  37.             else{
  38.                 throw new Exception("Directory " + name + " already exists!");
  39.             }
  40.         }
  41.  
  42.         public void DeleteDirectory(string name) {
  43.             name = name.Replace("/", "\\");
  44.  
  45.             if (name.Equals(@"\")) {
  46.                 throw new AccessViolationException("Root directory cannot be removed!");
  47.             }
  48.             else {
  49.                 var dir = Directories.First(d => d.Name == name);
  50.                 if (dir != null) {
  51.                     Directories.Remove(dir);
  52.                 }
  53.             }
  54.         }
  55.  
  56.         public void AllocateFile(string name, string path, long size) {
  57.             var file = Files.First(f => f.Name == name);
  58.             byte[] data = null;
  59.  
  60.             if (file == null) {
  61.                 Trace.WriteLine("Cannot allocate File " + name + ", because already exists!");
  62.                 throw new Exception("File " + name + " already exists!");
  63.             }
  64.             else {
  65.                 data = new byte[size];
  66.                 Files.Add(new PackageEntryFile() { Name = name, Size = data.Length, Data = Convert.ToBase64String(data), Directory = path, Hash = ComputeHash(data) });
  67.                 Trace.WriteLine("File " + name + " successful allocated byte[" + data.Length + "]!");
  68.             }
  69.         }
  70.  
  71.         public void ImportFile(string name, byte[] data, string directory = "/") {
  72.  
  73.         }
  74.     }
  75.  
  76.     public class PackageEntryDirectory {
  77.        
  78.         /// <summary>
  79.         /// Directory Name
  80.         /// </summary>
  81.         public string Name { get; set; }
  82.  
  83.         /// <summary>
  84.         /// Directory with this flag cannot be modifyed (you can't edit, allocate, import, delete any) just export files inside them.
  85.         /// </summary>
  86.         public bool IsLocked { get; set; }
  87.     }
  88.  
  89.     public class PackageEntryFile {
  90.  
  91.         /// <summary>
  92.         /// File Name
  93.         /// </summary>
  94.         public string Name { get; set; }
  95.        
  96.         /// <summary>
  97.         /// File Size
  98.         /// </summary>
  99.         public long Size { get; set; }
  100.  
  101.         /// <summary>
  102.         /// File Path
  103.         /// </summary>
  104.         public string Directory { get; set; }
  105.  
  106.         /// <summary>
  107.         /// Base64 Encoded Bytes
  108.         /// </summary>
  109.         public string Data { get; set; }
  110.  
  111.         /// <summary>
  112.         /// Base64 Encoded Bytes From Hash (SHA1)
  113.         /// </summary>
  114.         public string Hash { get; set; }
  115.     }
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement