Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.IO;
- using System.Diagnostics;
- using System.Security.Cryptography;
- namespace SimplePackager.Core {
- public class PackageFile {
- public PackageFile() {
- Directories = new List<PackageEntryDirectory>();
- Directories.Add(new PackageEntryDirectory() { Name = "/" });
- Files = new List<PackageEntryFile>();
- }
- private string ComputeHash(byte[] data) {
- return Convert.ToBase64String(SHA1.Create().ComputeHash(data));
- }
- /// <summary>
- /// Directories
- /// </summary>
- public List<PackageEntryDirectory> Directories { get; set; }
- /// <summary>
- /// Files
- /// </summary>
- public List<PackageEntryFile> Files { get; set; }
- public void CreateDirectory(string name) {
- if (Directories.First(d => d.Name == name) == null) {
- Directories.Add(new PackageEntryDirectory() { Name = name });
- }
- else{
- throw new Exception("Directory " + name + " already exists!");
- }
- }
- public void DeleteDirectory(string name) {
- name = name.Replace("/", "\\");
- if (name.Equals(@"\")) {
- throw new AccessViolationException("Root directory cannot be removed!");
- }
- else {
- var dir = Directories.First(d => d.Name == name);
- if (dir != null) {
- Directories.Remove(dir);
- }
- }
- }
- public void AllocateFile(string name, string path, long size) {
- var file = Files.First(f => f.Name == name);
- byte[] data = null;
- if (file == null) {
- Trace.WriteLine("Cannot allocate File " + name + ", because already exists!");
- throw new Exception("File " + name + " already exists!");
- }
- else {
- data = new byte[size];
- Files.Add(new PackageEntryFile() { Name = name, Size = data.Length, Data = Convert.ToBase64String(data), Directory = path, Hash = ComputeHash(data) });
- Trace.WriteLine("File " + name + " successful allocated byte[" + data.Length + "]!");
- }
- }
- public void ImportFile(string name, byte[] data, string directory = "/") {
- }
- }
- public class PackageEntryDirectory {
- /// <summary>
- /// Directory Name
- /// </summary>
- public string Name { get; set; }
- /// <summary>
- /// Directory with this flag cannot be modifyed (you can't edit, allocate, import, delete any) just export files inside them.
- /// </summary>
- public bool IsLocked { get; set; }
- }
- public class PackageEntryFile {
- /// <summary>
- /// File Name
- /// </summary>
- public string Name { get; set; }
- /// <summary>
- /// File Size
- /// </summary>
- public long Size { get; set; }
- /// <summary>
- /// File Path
- /// </summary>
- public string Directory { get; set; }
- /// <summary>
- /// Base64 Encoded Bytes
- /// </summary>
- public string Data { get; set; }
- /// <summary>
- /// Base64 Encoded Bytes From Hash (SHA1)
- /// </summary>
- public string Hash { get; set; }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement