コード例 #1
0
ファイル: iwezel.cs プロジェクト: Aredhela/ZonkilOS
    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);
    }
コード例 #2
0
ファイル: iwezel.cs プロジェクト: Aredhela/ZonkilOS
    //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;
    }
コード例 #3
0
ファイル: iwezel.cs プロジェクト: Aredhela/ZonkilOS
    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);
    }
コード例 #4
0
ファイル: iwezel.cs プロジェクト: Aredhela/ZonkilOS
    //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;
    }