//Funzioni Statiche public static Snapshot creaNuovo(int id_file, DateTime timestamp = new DateTime(), int dim = 0, string sha_contenuto = "") { //Controllo che gli argomenti non abbiano caratteri strani Snapshot s = null; if (base_path == null) { base_path = Properties.ApplicationSettings.Default.base_path + Path.DirectorySeparatorChar + "users_files"; } // Genero un nome casuale per il file in locale e controllo che non esista string nome_locale; do { nome_locale = Path.GetRandomFileName(); } while (File.Exists(base_path + Path.DirectorySeparatorChar + nome_locale)); // Creo il file (vuoto) FileStream f = File.Create(base_path + Path.DirectorySeparatorChar + nome_locale); // Memorizzo i file nel db, ottengo l'id e ritorno il nuovo snapshot string[][] parameters = new string[5][]; parameters[0] = new string[2] { "@dim", dim.ToString() }; parameters[1] = new string[2] { "@t_modifica", timestamp.ToString("u") }; parameters[2] = new string[2] { "@sha_contenuto", sha_contenuto }; parameters[3] = new string[2] { "@nome_locale_s", nome_locale }; parameters[4] = new string[2] { "@id_file", id_file.ToString() }; DB_Table db = new DB_Table(); Log l = Log.getLog(); db.ExecuteQuery(sql_insert_data, parameters); long id = db.getLastInsertedId(); l.log("Id inserito: " + id); /* Per qualche motivo questa cosa lancia una nullReferenceException, come se s non venisse creato*/ s = new Snapshot(id_file, (int)id); s.cambioContenutoIniziato = true; s.__scrittura_contenuto = f; s.posizione_scrittura = 0; s.__sha_contenuto = sha_contenuto; //return new Snapshot(nome_utente,(int)id); return(s); }
public FileUtente nuovoFile(string nome_file, string path_relativo, DateTime t_creazione = new DateTime()) { //Se non c'è spazio, cerco un capro espiatorio da buttare per far posto a quello nuovo, //Altrimenti lancio un'eccezione string[][] parameters = new string[1][]; if (this.__list_ids_files.Count >= this.__max_file) { int id_da_sacrificare = -1; parameters[0] = new string[2] { "@nome_utente", __nome_utente }; this.ExecuteQuery(Properties.SQLquery.sqlCercaFileDaDistruggere, parameters); foreach (int i in this.GetResults()) { id_da_sacrificare = Int32.Parse(this.ResultGetValue("id").ToString()); break; } if (id_da_sacrificare >= 0) { for (int i = 0; i < this.Length; i++) { if (this[i].Id == id_da_sacrificare) { this[i].Distruggi(); } } } else { this.l.log("Non c'è più posto per l'utente " + __nome_utente, Level.INFO); throw new DatabaseException("Non è più possibile inserire nuovi file. Limite superato.", DatabaseErrorCode.LimiteFileSuperato); } } if (t_creazione == DateTime.MinValue) { t_creazione = DateTime.Now; } parameters = new string[4][]; parameters[0] = new string[2] { "@t_creazione", t_creazione.ToString("u") }; parameters[1] = new string[2] { "@path_relativo_c", path_relativo }; parameters[2] = new string[2] { "@nome_file_c", nome_file }; parameters[3] = new string[2] { "@nome_utente", this.__nome_utente }; DB_Table db = new DB_Table(); Log l = Log.getLog(); db.ExecuteQuery(Properties.SQLquery.sqlNuovoFile, parameters); long id = db.getLastInsertedId(); FileUtente file = new FileUtente(this.__nome_utente, (int)id); this.__list_ids_files.Add(file.Id); this.__file_list[this.__list_ids_files.Count - 1] = file; return(file); }