public static int delete(ref pom x, string nazwa, ref int o) //funkcja służąca do usuwania pliku { int pom = iwezel.czyistnieje(ref x, nazwa); if (pom == -1) { Console.WriteLine("Nie ma takiego pliku"); return(-1); } if (pom == 1 || pom == 0) { Console.WriteLine("Nie można usunąć tego ważnego folderu"); return(-1); } bool ok = false; int m = 0, u = 0, k = 0; List <int> LBP = new List <int>(); for (int i = 0; i < x.LK.Count(); i++) { for (int j = 0; j < x.LK[i].Count(); j++) { if (x.LK[i][j].nriwezla == pom) { u = x.LK[i][0].nriwezla; } } } for (int i = 0; i < x.LK.Count(); i++) { if (m == 1) { while (i != x.LK.Count()) { for (int l = x.LK[i].Count() - 1; l > 0; l--) { x.LK[i][l].nriwezla -= 1; //poprawa wpisow katalogowych w następnych katalogach } i++; } break; } for (int j = 0; j < x.LK[i].Count(); j++) { if (m == 1) { break; } if (x.tabi[pom].Typ == 'p') { if (x.LK[i][j].nazwa == nazwa && x.LK[i][j].nriwezla >= u) { if (x.LK[i].ElementAt(x.LK[i].Count - 1) != x.LK[i][j]) { for (int l = x.LK[i].Count() - 1; l >= x.LK[i][j].nriwezla; l--) { x.LK[i][l].nriwezla -= 1; } } //poprawa wpisow katalogowych jeśli usuwamy plik x.LK[i].RemoveAt(j); ok = true; m = 1; Console.WriteLine("usunięto plik o nazwie:" + nazwa); break; } } if (x.tabi[pom].Typ == 'k') { if (x.LK[i][0].nazwa == nazwa && x.LK[i][j].nriwezla >= u) { for (int l = x.LK[i].Count() - 1; l > 0; l--) { iwezel.delete(ref x, x.LK[i][l].nazwa, ref o); } x.LK[i].Clear(); x.LK.RemoveAt(i); Console.WriteLine("usunięto katalog o nazwie:" + nazwa); ok = true; m = 1; break; } } } } if (ok == false) { Console.WriteLine("Kazałeś usunąć ważny katalog!"); return(-1); } LBP = iwezel.listazblok(ref x, pom); if (x.tabi[pom].Typ == 'k') { for (int i = 0; i < x.LK.Count(); i++) { for (int j = 0; j < x.LK[i].Count(); j++) { if (x.LK[i][j].nriwezla == pom) { x.LK[i].RemoveAt(j); } } } for (int i = 0; i < x.LK.Count(); i++) { for (int j = 0; j < x.LK[i].Count(); j++) { if (x.LK[i][j].nriwezla > u) { x.LK[i][j].nriwezla--; } } } x.tabi[pom] = null; if (pom == licz - 1) //jeśli na końcu w tablicy to zmniejszamy licznik elementów w tablicy i wychodzimy { licz--; return(0); } if (pom < licz - 1) { int pom2 = 0; // w innym wypadku musimy przepisać obiekty do naszej tablicy za pomocą tablicy pomocniczej iwezel[] tabpom = new iwezel[20]; for (int i = 0; i < x.tabi.Count(); i++) { if (x.tabi[i] != null) { tabpom[pom2] = x.tabi[i]; pom2++; } } x.tabi = tabpom; } } if (x.tabi[pom].Typ == 'p') { byte[] tp = new byte[32]; for (int i = 0; i < LBP.Count; i++) { o = o - 1; //zwolnienie zajetych bloków przez plik x.dysk[LBP.ElementAt(i)].nast = -1; x.dysk[LBP.ElementAt(i)].bl = tp; } if (x.tabi[pom].blokindeksowy != -1) { x.dysk[x.tabi[pom].blokindeksowy].nast = -1; x.dysk[x.tabi[pom].blokindeksowy].bl = tp; o--; } x.tabi[u].rozmiar -= x.tabi[pom].rozmiar; x.tabi[pom] = null; if (pom == licz - 1) //jeśli na końcu w tablicy to zmniejszamy licznik elementów w tablicy i wychodzimy { licz--; return(0); } if (pom < licz - 1) { int pom2 = 0; // w innym wypadku musimy przepisać obiekty do naszej tablicy za pomocą tablicy pomocniczej iwezel[] tabpom = new iwezel[20]; for (int i = 0; i < x.tabi.Count(); i++) { if (x.tabi[i] != null) { tabpom[pom2] = x.tabi[i]; pom2++; } } x.tabi = tabpom; } } licz--; return(0); }
//funkcja służąca do usuwania pliku public static int delete(ref pom x, string nazwa, ref int o) { int pom = iwezel.czyistnieje(ref x, nazwa); if (pom == -1) { Console.WriteLine("Nie ma takiego pliku"); return -1; } if (pom == 1 || pom == 0) { Console.WriteLine("Nie można usunąć tego ważnego folderu"); return -1; } bool ok = false; int m = 0,u=0,k=0; List<int> LBP = new List<int>(); for (int i = 0; i < x.LK.Count(); i++) { for (int j = 0; j < x.LK[i].Count(); j++) { if (x.LK[i][j].nriwezla == pom) { u = x.LK[i][0].nriwezla; } } } for (int i = 0; i < x.LK.Count(); i++) { if (m == 1) { while (i != x.LK.Count()) { for (int l = x.LK[i].Count() - 1; l > 0; l--) { x.LK[i][l].nriwezla -= 1; //poprawa wpisow katalogowych w następnych katalogach } i++; } break; } for (int j = 0; j < x.LK[i].Count(); j++) { if (m == 1) break; if (x.tabi[pom].Typ == 'p') { if (x.LK[i][j].nazwa == nazwa && x.LK[i][j].nriwezla >= u) { if (x.LK[i].ElementAt(x.LK[i].Count - 1) != x.LK[i][j]) { for (int l = x.LK[i].Count() - 1; l >= x.LK[i][j].nriwezla; l--) { x.LK[i][l].nriwezla -= 1; } } //poprawa wpisow katalogowych jeśli usuwamy plik x.LK[i].RemoveAt(j); ok = true; m = 1; Console.WriteLine("usunięto plik o nazwie:" + nazwa); break; } } if (x.tabi[pom].Typ == 'k') { if (x.LK[i][0].nazwa == nazwa && x.LK[i][j].nriwezla >= u) { for (int l = x.LK[i].Count() - 1; l > 0; l--) { iwezel.delete(ref x, x.LK[i][l].nazwa, ref o); } x.LK[i].Clear(); x.LK.RemoveAt(i); Console.WriteLine("usunięto katalog o nazwie:" + nazwa); ok = true; m = 1; break; } } } } if (ok == false) { Console.WriteLine("Kazałeś usunąć ważny katalog!"); return -1; } LBP = iwezel.listazblok(ref x, pom); if (x.tabi[pom].Typ == 'k') { for (int i = 0; i < x.LK.Count(); i++) { for (int j = 0; j < x.LK[i].Count(); j++) { if (x.LK[i][j].nriwezla == pom) { x.LK[i].RemoveAt(j); } } } for (int i = 0; i < x.LK.Count(); i++) { for (int j = 0; j < x.LK[i].Count(); j++) { if (x.LK[i][j].nriwezla > u) { x.LK[i][j].nriwezla--; } } } x.tabi[pom] = null; if (pom == licz - 1) //jeśli na końcu w tablicy to zmniejszamy licznik elementów w tablicy i wychodzimy { licz--; return 0; } if (pom < licz - 1) { int pom2 = 0; // w innym wypadku musimy przepisać obiekty do naszej tablicy za pomocą tablicy pomocniczej iwezel[] tabpom = new iwezel[20]; for (int i = 0; i < x.tabi.Count(); i++) { if (x.tabi[i] != null) { tabpom[pom2] = x.tabi[i]; pom2++; } } x.tabi = tabpom; } } if (x.tabi[pom].Typ == 'p') { byte[] tp = new byte[32]; for (int i = 0; i < LBP.Count; i++) { o = o - 1; //zwolnienie zajetych bloków przez plik x.dysk[LBP.ElementAt(i)].nast = -1; x.dysk[LBP.ElementAt(i)].bl = tp; } if (x.tabi[pom].blokindeksowy != -1) { x.dysk[x.tabi[pom].blokindeksowy].nast = -1; x.dysk[x.tabi[pom].blokindeksowy].bl = tp; o--; } x.tabi[u].rozmiar -= x.tabi[pom].rozmiar; x.tabi[pom] = null; if (pom == licz - 1) //jeśli na końcu w tablicy to zmniejszamy licznik elementów w tablicy i wychodzimy { licz--; return 0; } if (pom < licz - 1) { int pom2 = 0; // w innym wypadku musimy przepisać obiekty do naszej tablicy za pomocą tablicy pomocniczej iwezel[] tabpom = new iwezel[20]; for (int i = 0; i < x.tabi.Count(); i++) { if (x.tabi[i] != null) { tabpom[pom2] = x.tabi[i]; pom2++; } } x.tabi = tabpom; } } licz--; return 0; }
public static int create(ref pom x, string nazwa, char typ, string nazwfold) //funkcja służąca do utworzenia pliku o typie: "typ", o nazwie: "nazwa" w katalogu o nazwie: "nazwfold" { if (licz == 20) { Console.WriteLine("\nWięcej plików nie dodamy, ponieważ tablica i-węzłów może mieć maksymalnie 20 elementów "); return(-1); } if (licz > 1) { int w, k; w = iwezel.czyistnieje(ref x, nazwa); k = iwezel.czyistnieje(ref x, nazwfold); if (w != -1) { Console.WriteLine("Taka nazwa już istnieje"); return(-1); } //sprawdzamy czy istnieje plik lub katalog o tej samej nazwie if (k == -1) { Console.WriteLine("Nie ma takiego katalogu plik lub katalog nie zostanie utworzony"); return(-1); } } if (typ == 'k') { iwezel z = new iwezel(ref x, typ); WpisK q = new WpisK(nazwa, (byte)licz); if (licz >= 2) { Console.WriteLine("Utworzono katalog: " + nazwa + " w katalogu: " + nazwfold); } for (int i = 0; i < x.LK.Count(); i++) { if (x.LK[i][0].nazwa == nazwfold) { x.LK[i].Add(q); break; } } x.LK.Add(new List <WpisK>()); x.LK[x.LK.Count() - 1].Add(q); if (licz == 1) { Console.WriteLine("Utworzono katalog 'Root' oraz 'Home' \n"); } } if (typ == 'p') { bool ok = false; iwezel z = new iwezel(ref x, typ); WpisK q = new WpisK(nazwa, (byte)licz); for (int i = 0; i < x.LK.Count(); i++) { for (int j = 0; j < x.LK[i].Count(); j++) { if (x.LK[i][j].nazwa == nazwa) { ok = true; } } //spr czy nie ma pliku o tej samej nazwie } if (ok == true) { Console.WriteLine("istnieje plik o takiej nazwie w tym katalogu!"); return(-1); } Console.WriteLine("Utworzono plik: " + nazwa + " w katalogu: " + nazwfold); for (int i = 0; i < x.LK.Count(); i++) { if (x.LK[i][0].nazwa == nazwfold && ok == false) { x.LK[i].Add(q); break; } } } licz++; return(0); }
//funkcja służąca do utworzenia pliku o typie: "typ", o nazwie: "nazwa" w katalogu o nazwie: "nazwfold" public static int create(ref pom x, string nazwa, char typ, string nazwfold) { if (licz == 20) { Console.WriteLine("\nWięcej plików nie dodamy, ponieważ tablica i-węzłów może mieć maksymalnie 20 elementów "); return -1; } if (licz > 1) { int w,k; w = iwezel.czyistnieje(ref x, nazwa); k = iwezel.czyistnieje(ref x, nazwfold); if (w != -1) { Console.WriteLine("Taka nazwa już istnieje"); return -1; } //sprawdzamy czy istnieje plik lub katalog o tej samej nazwie if (k == -1) { Console.WriteLine("Nie ma takiego katalogu plik lub katalog nie zostanie utworzony"); return -1; } } if (typ == 'k') { iwezel z = new iwezel(ref x, typ); WpisK q = new WpisK(nazwa, (byte)licz); if(licz>=2) Console.WriteLine("Utworzono katalog: "+nazwa+" w katalogu: "+ nazwfold); for (int i = 0; i < x.LK.Count(); i++) { if (x.LK[i][0].nazwa == nazwfold) { x.LK[i].Add(q); break; } } x.LK.Add(new List<WpisK>()); x.LK[x.LK.Count() - 1].Add(q); if (licz == 1) Console.WriteLine("Utworzono katalog 'Root' oraz 'Home' \n"); } if (typ == 'p') { bool ok = false; iwezel z = new iwezel(ref x, typ); WpisK q = new WpisK(nazwa, (byte)licz); for (int i = 0; i < x.LK.Count(); i++) { for (int j = 0; j < x.LK[i].Count(); j++) { if (x.LK[i][j].nazwa == nazwa) ok = true; } //spr czy nie ma pliku o tej samej nazwie } if (ok == true) { Console.WriteLine("istnieje plik o takiej nazwie w tym katalogu!"); return -1; } Console.WriteLine("Utworzono plik: " + nazwa + " w katalogu: " + nazwfold); for (int i = 0; i < x.LK.Count(); i++) { if (x.LK[i][0].nazwa == nazwfold && ok == false) { x.LK[i].Add(q); break; } } } licz++; return 0; }