{"id":558,"date":"2013-05-03T22:38:20","date_gmt":"2013-05-03T22:38:20","guid":{"rendered":"http:\/\/piatkosia.k4be.pl\/wordpress\/?p=558"},"modified":"2013-05-04T09:26:08","modified_gmt":"2013-05-04T09:26:08","slug":"zrzuc-notatke-z-kodu","status":"publish","type":"post","link":"https:\/\/piatkosia.k4be.pl\/wordpress\/2013\/05\/03\/zrzuc-notatke-z-kodu\/","title":{"rendered":"Zrzu\u0107 notatk\u0119 z kodu;)"},"content":{"rendered":"<p style=\"text-align: justify;\">Witajcie czytelnicy;)<br \/>\nWiosenka przysz\u0142a to i mi si\u0119 cz\u0119\u015bciej pisa\u0107 zachcia\u0142o. Lody pu\u015bci\u0142y, te sprawy. Dzisiaj mam dla was kawaluntek kodu, kt\u00f3rego om\u00f3wi\u0119 dla treningu. J\u0119zyk oczywi\u015bcie c#, acz mo\u017cna go \u0142atwo przet\u0142umaczy\u0107 na dowolny inny i to b\u0119dzie dzia\u0142a\u0107, bez problemu. Zdaj\u0119 sobie spraw\u0119, \u017ce mo\u017cna to napisa\u0107 w 3 linijkach, ale wtedy nie by\u0142oby o czym opowiada\u0107.<\/p>\n<p style=\"text-align: justify;\">Wyobra\u017amy sobie tak\u0105 sytuacj\u0119. Siedzimy sobie w commandline, chcemy na szybko sobie zapisa\u0107 jak\u0105\u015b notatk\u0119.<br \/>\nAle tak zupe\u0142nie na szybko. Wpisuj\u0105c notuj hehe i w notatce mamy hehe. Notatka jest tworzona na pulpicie (gdzie naj\u0142atwiej j\u0105 znale\u017a\u0107). Nie wykrzacza si\u0119 w momencie kiedy plik ju\u017c istnieje, tylko szuka wolnej nazwy i si\u0119 tworzy. Poni\u017cej wklejam kod, a nast\u0119pnie go nieco om\u00f3wi\u0119.<\/p>\n<p><!--more--><\/p>\n<pre class=\"brush: csharp; collapse: true\">using System;\r\nusing System.Collections.Generic;\r\nusing System.Text;\r\nusing System.IO;\r\nnamespace notuj\r\n{\r\n    class Sciezka\r\n    {\r\n        private string calasciezka;\r\n        private string nazwapliku;\r\n        private uint ilosc = 0;\r\n        \/\/Lokalizacja: pulpit aktualnie zalogowanego usera:)\r\n        public readonly string Lokalizacja = Environment.GetEnvironmentVariable(\"HOMEDRIVE\").ToString() + Environment.GetEnvironmentVariable(\"HOMEPATH\").ToString() + \"\\\\Desktop\\\\\";\r\n        public readonly string Prefix = \"notatka_\";    \r\n        public string CalaSciezka { get { return calasciezka; } }\r\n        public string Nazwapliku { get { return nazwapliku; } }\r\n        public Sciezka()\r\n        {\r\n            ustaw();\r\n        }\r\n\r\n        private void ustaw()\r\n        {\r\n            nazwapliku = Prefix + ilosc + \".txt\"; \/\/.txt u\u017cyto jako sta\u0142ej dos\u0142ownej, nie ma sensu zapisywa\u0107 pliku tekstowego w innym formacie.\r\n            calasciezka = Lokalizacja + Nazwapliku;\r\n        }\r\n        public void update()\r\n        {\r\n            ilosc++;\r\n            ustaw();\r\n        }\r\n\r\n    }\r\n    class Program\r\n    {\r\n        static void Main(string[] args)\r\n        {\r\n            if (args.Length == 0)\r\n                return;\r\n            Sciezka sciezka = new Sciezka();\r\n            foreach (string f in Directory.GetFiles(sciezka.Lokalizacja, sciezka.Prefix + \"*.txt\"))\r\n            {\r\n                sciezka.update();\r\n            }\r\n            while (Directory.GetFiles(sciezka.Lokalizacja, sciezka.Nazwapliku).Length != 0)\r\n            {\r\n                sciezka.update();\r\n\r\n            }\r\n            try\r\n            {\r\n                System.IO.StreamWriter file = new System.IO.StreamWriter(sciezka.CalaSciezka);\r\n                foreach (string parametr in args)\r\n                {\r\n                    file.Write(parametr + \" \", true);\r\n                }\r\n                file.Close();\r\n            }\r\n            catch (System.UnauthorizedAccessException) {\r\n                Console.WriteLine(\"Nie mo\u017cesz tu pisa\u0107. \\n Prawdopobna przyczyna: dodaj aplikacj\u0119 do zaufanych w AV.\");\r\n            }\r\n        }\r\n    }\r\n}<\/pre>\n<p style=\"text-align: justify;\">Klasa pomocnicza &#8211; Sciezka<br \/>\nUzna\u0142am, \u017ce warto zgrupowa\u0107 zmienne i utworzy\u0107 z nich osobn\u0105 klas\u0119. Ma to swoj\u0105 logik\u0119, wszak\u017ce one opisuj\u0105 jedno co\u015b &#8211; \u015bcie\u017ck\u0119 dost\u0119pu do naszej notatki, a tak\u017ce j\u0105 sam\u0105 generuj\u0105.<br \/>\nMamy tu r\u00f3\u017cne zmienne, jedne s\u0105 podawane dos\u0142ownie, inne generowane raz a dobrze, jeszcze inne zmieniaj\u0105 si\u0119.<br \/>\nMo\u017cna wyr\u00f3\u017cni\u0107 kilka sposob\u00f3w dost\u0119pu do owych zmiennych:<br \/>\n1) zmienna ma by\u0107 tylko do odczytu &#8211; praktycznie odczyta\u0107 j\u0105 mo\u017ce ktokolwiek, ale tylko odczyta\u0107. Wi\u0119c zamiast akcesora postanowi\u0142am u\u017cy\u0107 publicznej zmiennej tylko do odczytu. Dok\u0142adanie metody do odczytania jej (czy akcesora) niepotrzebnie by tylko za\u015bmieci\u0142o. Oczywi\u015bcie, pury\u015bci powiedz\u0105 &#8222;a co jak dan\u0105 warto\u015b\u0107 zaczniesz przechowywa\u0107 inaczej&#8221; &#8211; jednak trza si\u0119 zastanowi\u0107, czy b\u0119dzie w przysz\u0142o\u015bci taka potrzeba. Wtedy si\u0119 zmieni:)<br \/>\n2) zmienna dost\u0119pna tylko w klasie &#8211; a wi\u0119c prywatna o swobodnym dost\u0119pie.<br \/>\n3) Zmienna, kt\u00f3ra wewn\u0105trz klasy jest ustawiana, za\u015b mo\u017ce by\u0107 czytana poza ni\u0105 &#8211; czyli mamy zmienn\u0105 prywatn\u0105 z publicznym akcesorem, posiadaj\u0105cym geta, a pozbawionym seta. Czyli: klasa ma dost\u0119p swobodny, ale ka\u017cdy inny mo\u017ce zmienn\u0105 odczyta\u0107.<br \/>\n4) Zmiennych publicznych swobodnego dost\u0119pu nie ma &#8211; i w programowaniu obiektowym raczej ich by\u0107 nie powinno, lub powinny by\u0107 one rzadkie.<br \/>\nDalej mamy ju\u017c tylko metody klasy. S\u0105 one z reszt\u0105 bardzo proste. Szukamy cz\u0119\u015bci wsp\u00f3lnych, potem wrzucamy je w metody, kt\u00f3re nast\u0119pnie wywo\u0142ujemy. Metody s\u0105 do\u015b\u0107 proste. Ustaw ustawia nam now\u0105 nazw\u0119 \u015bcie\u017cki, za\u015b update aktualizuje stan obiektu (inkrementuje licznik b\u0119d\u0105cy ilo\u015bci\u0105 plik\u00f3w na dysku oraz ustawia funkcj\u0105 ustaw now\u0105 warto\u015b\u0107).<\/p>\n<p style=\"text-align: justify;\">Przechodzimy do g\u0142\u00f3wnej funkcji programu.<br \/>\nProgram dzia\u0142a tylko je\u015bli mu podamy jaki\u015b parametr. Je\u017celi mu nie podamy parametru &#8211; nie dzia\u0142a czyt. nic nie robi. Mo\u017cna tu wyrzuci\u0107 komunikat na konsol\u0119 z info &#8222;u\u017cycie: notuj parametry&#8221;, ale to pomin\u0119\u0142am, bo nie jest mi to potrzebne. Wiele program\u00f3w bez parametr\u00f3w nie robi nic i dopiero jak im damy &#8222;\/?&#8221; Je\u015bli kto\u015b chce, mo\u017ce dopisa\u0107.<\/p>\n<p style=\"text-align: justify;\">Dalej b\u0119dziemy zak\u0142ada\u0107, \u017ce user jednak parametr poda\u0142.<br \/>\nPierwsze co robimy to tworzymy obiekt b\u0119d\u0105cy instancj\u0105 naszej klasy pomocniczej.<br \/>\nPotem (te 2 p\u0119tle) w zasadzie pr\u00f3bujemy ustali\u0107 nazw\u0119 dla naszego pliku z notatk\u0105. Najpierw przeszukujemy folder, by zliczy\u0107 pliki notatek. Je\u015bli notatek jest 5, ta nowa b\u0119dzie sz\u00f3st\u0105 i tak dalej. A co je\u015bli numerki by\u0142y nie po kolei?<br \/>\nZa to odpowiada p\u0119tla while, kt\u00f3ra sprawdza, czy wygenerowana nazwa ju\u017c istnieje. Je\u015bli tak, to po prostu bierze nast\u0119pn\u0105, a\u017c nie znajdzie.<br \/>\nNast\u0119pnie pr\u00f3buje stworzy\u0107 plik, wpisa\u0107 zawarto\u015b\u0107 parametr\u00f3w, oraz zamkn\u0105\u0107 plik.<br \/>\nOstatnie co robimy, to \u0142apiemy wyj\u0105tek UnauthorizedAccessException, \u017ceby platforma nie plu\u0142a z powodu b\u0142\u0119du zapisu.<br \/>\nOt, i po kodziku:)<\/p>\n<p style=\"text-align: justify;\">Z pewno\u015bci\u0105 idzie jeszcze zoptymalizowa\u0107, ale uwa\u017cam, \u017ce najgorzej nie jest.<br \/>\nPozdrawiam:)<\/p>\n<p style=\"text-align: justify;\">PS: Dodam jeszcze, \u017ce jak chcecie \u0142atwo u\u017cy\u0107 binarki, to zr\u00f3bcie taki myk<\/p>\n<pre class=\"brush: shell; collapse: false\">set PATH=%PATH%;C:\\notuj.exe<\/pre>\n<p>Oczywi\u015bcie zamiast C:\\notuj.exe podajcie rzeczywist\u0105 \u015bcie\u017ck\u0119 dost\u0119pu:)<\/p>\n<p>PS2: Szybciej b\u0119dzie echo notatka &gt;plik ale co tam;p<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Witajcie czytelnicy;) Wiosenka przysz\u0142a to i mi si\u0119 cz\u0119\u015bciej pisa\u0107 zachcia\u0142o. Lody pu\u015bci\u0142y, te sprawy. Dzisiaj mam dla was kawaluntek kodu, kt\u00f3rego om\u00f3wi\u0119 dla treningu.<\/p>\n<div class=\"more-link-wrapper\"><a class=\"more-link\" href=\"https:\/\/piatkosia.k4be.pl\/wordpress\/2013\/05\/03\/zrzuc-notatke-z-kodu\/\">Lecim dalej<span class=\"screen-reader-text\">Zrzu\u0107 notatk\u0119 z kodu;)<\/span> <i class=\"fas fa-angle-right\"><\/i><\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[83,54],"tags":[142,40,210],"class_list":["post-558","post","type-post","status-publish","format-standard","hentry","category-c_sharp","category-ms","tag-csharp","tag-konsola","tag-programowanie","entry"],"_links":{"self":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/558","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/comments?post=558"}],"version-history":[{"count":16,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/558\/revisions"}],"predecessor-version":[{"id":574,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/posts\/558\/revisions\/574"}],"wp:attachment":[{"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/media?parent=558"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/categories?post=558"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piatkosia.k4be.pl\/wordpress\/wp-json\/wp\/v2\/tags?post=558"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}