{"id":1152,"date":"2020-06-27T21:05:53","date_gmt":"2020-06-27T19:05:53","guid":{"rendered":"http:\/\/www.daniel.slask.pl\/?p=1152"},"modified":"2021-02-08T22:18:59","modified_gmt":"2021-02-08T21:18:59","slug":"otwieranie-i-zapisywanie-plikow-w-c","status":"publish","type":"post","link":"https:\/\/daniel.slask.pl\/m\/otwieranie-i-zapisywanie-plikow-w-c\/","title":{"rendered":"Otwieranie i zapisywanie plik\u00f3w w C#"},"content":{"rendered":"\n<p><p style=\"text-align: justify;\">Pisz\u0105 programy, nie raz b\u0119dzie potrzeba aby otworzy\u0107 lub zapisa\u0107 jaki\u015b plik &#8211; nie tylko tekstowy. Dzisiaj przedstawi\u0119 jak tego dokona\u0107 w programie <em>Microsoft Visual<\/em>. Otwarcie jak i zamkni\u0119cie b\u0119dzie wykorzystywa\u0142o kontrolk\u0119 dodawan\u0105 na formatk\u0119. Funkcja otwierania b\u0119dzie wykonana inaczej ni\u017c zapisywania.<\/p><\/p>\n\n\n\n<p><p style=\"text-align: justify;\">Zacznijmy od Otwarcia pliku \u2013 w tym celu na nasz\u0105 formatk\u0119 dodajemy kontrolk\u0119 <em>OpenFileDialog<\/em>, kt\u00f3ra to spowoduje otwarcie okienka dialogowego z mo\u017cliwo\u015bci\u0105 wyboru pliku do otwarcia. We w\u0142a\u015bciwo\u015bciach, mo\u017cemy zmieni\u0107 jego nazw\u0119, oraz okre\u015bli\u0107 jakie pliki maj\u0105 by\u0107 wy\u015bwietlane (wpisuj\u0105c *. i po kropce rozszerzenie wy\u015bwietlone b\u0119d\u0105 pliki z danym rozszerzeniem), oraz z jakiej domy\u015blnej lokalizacji ma zaczyna\u0107 (<em>InitialDirectory<\/em>).<\/p><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized wp-block-gallery columns-5 is-cropped\"><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/03\/open.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/03\/open.png\" alt=\"\" class=\"wp-image-1153\" width=\"167\" height=\"236\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/03\/open.png 312w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/03\/open-213x300.png 213w\" sizes=\"(max-width: 167px) 100vw, 167px\" \/><\/a><\/figure>\n\n\n\n<p><p style=\"text-align: justify;\">W kodzie \u017ar\u00f3d\u0142owym r\u00f3wnie\u017c mo\u017cemy okre\u015bli\u0107 jakie pliki maj\u0105 by\u0107 wy\u015bwietlane, oraz z jakiej lokalizacji ma zaczyna\u0107 wyszukiwanie. W tym przypadku zastosowali\u015bmy ustawienia programu, zostan\u0105 opisane w jednym z kolejnych wpis\u00f3w.<\/p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp\">Otworz.Filter = \"txt files (*.txt)|*.txt|All files (*.*)|*.*\";\nOtworz.InitialDirectory = Properties.Settings.Default.Path_open_file;<\/code><\/pre>\n\n\n\n<p><p style=\"text-align: justify;\">Otwieramy okienku wyboru danego pliku, a po zamkni\u0119ciu go poprzez OK zapisujemy lokalizacj\u0119 do zmiennej, oraz strumie\u0144 otwieranych danych<\/p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">if( Otworz.ShowDialog() == DialogResult.OK){\nfilePath = Otworz.FileName;\nvar fileStream = Otworz.OpenFile();<\/code><\/pre>\n\n\n\n<p><p style=\"text-align: justify;\">Tworzymy nowy strumie\u0144 danych i zapisujemy odczytany plik do bufora, a nast\u0119pnie wy\u015bwietlamy potwierdzenie o prawid\u0142owym otwarciu pliku \u2013 w tym przypadku tekst wy\u015bwietlany b\u0119dzie aplecie status_bar &#8211; jest to dodatek, nie jest potrzebny aby wszystko dzia\u0142a, ale dobrze jest mie\u0107 jakie\u015b potwierdzenie czy zosta\u0142o wszystko poprawnie wykonane.<\/p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">using (StreamReader reader = new StreamReader(fileStream)){\nfileContent = reader.ReadToEnd();\nPodsumowanie_text.AppendText(\"-----\\n\\rOtwarto pomy\u015blnie plik: \" + Otworz.SafeFileName);\n}<\/code><\/pre>\n\n\n\n<p><p style=\"text-align: justify;\">Ca\u0142y programy umieszczamy np. w kodzie obs\u0142ugi przycisku. Wygl\u0105da on nast\u0119puj\u0105co.<\/p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">Otworz.Filter = \"txt files (*.txt)|*.txt|All files (*.*)|*.*\";\nOtworz.InitialDirectory = Properties.Settings.Default.Path_open_file;\nif( Otworz.ShowDialog() == DialogResult.OK){\nfilePath = Otworz.FileName;\nvar fileStream = Otworz.OpenFile();\n\/\/zapisanie do ustawie\u0144 ostatniej \u015bcie\u017cki\nProperties.Settings.Default.Path_open_file = filePath.Replace(Otworz.SafeFileName,\"\");\nusing (StreamReader reader = new StreamReader(fileStream)){\nfileContent = reader.ReadToEnd();\nPodsumowanie_text.AppendText(\"-----\\n\\rOtwarto pomy\u015blnie plik: \" + Otworz.SafeFileName);\n}\n}<\/code><\/pre>\n\n\n\n<p><p style=\"text-align: justify;\">Teraz przejd\u017amy do zapisu bufora do pliku. W tym celu te\u017c wykorzystamy kontrolk\u0119, ale w celu okre\u015blenia lokalizacji zapisu pliku, natomiast ca\u0142y proces zapisu b\u0119dzie odbywa\u0142 si\u0119 przy u\u017cyciu przestrzeni IO. Wybieramy SaveFileDialog. W w\u0142a\u015bciwo\u015bciach tej kontrolki mo\u017cna m.in. nada\u0107 mu swoj\u0105 nazw\u0119.<\/p><\/p>\n\n\n\n<figure class=\"wp-block-image is-resized wp-block-gallery columns-5 is-cropped\"><a href=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/03\/save.png\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.daniel.slask.pl\/m\/wp-content\/uploads\/2020\/03\/save.png\" alt=\"\" class=\"wp-image-1154\" width=\"171\" height=\"241\" srcset=\"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/03\/save.png 312w, https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/03\/save-213x300.png 213w\" sizes=\"(max-width: 171px) 100vw, 171px\" \/><\/a><\/figure>\n\n\n\n<p><p style=\"text-align: justify;\">Zapis pliku umieszczamy np. w kodzie przycisku, kt\u00f3ry po naci\u015bni\u0119ciu spowoduje otwarcie okienka wyboru lokalizacji jego zapisu. Po potwierdzeniu lokalizacji, zapisywany jest bufor do wskazanego pliku poprzez<em> File.WriteAllText<\/em>. Po zapisaniu danych wy\u015bwietlana jest informacja potwierdzaj\u0105ca zapis pliku.<\/p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"csharp\" class=\"language-csharp line-numbers\">if(Zapisz.ShowDialog() == DialogResult.OK){\nFile.WriteAllText(Zapisz.FileName, doZapisu.ToString());\nPodsumowanie_text.AppendText(\"\\n\\rUtworzono i zapisano dane do nowego pliku:\\n\" + Zapisz.FileName + \"\\n----\");\n}<\/code><\/pre>\n\n\n\n<p>Po wi\u0119cej informacji odnosz\u0119 do dokumentacji z <a href=\"https:\/\/docs.microsoft.com\/pl-pl\/dotnet\/api\/system.io.file.writealltext?view=netframework-4.8#System_IO_File_WriteAllText_System_String_System_String_\">Microsoftu<\/a>:<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pisz\u0105 programy, nie raz b\u0119dzie potrzeba aby otworzy\u0107 lub zapisa\u0107 jaki\u015b plik &#8211; nie tylko tekstowy. Dzisiaj przedstawi\u0119 jak tego dokona\u0107 w programie Microsoft Visual. Otwarcie jak i zamkni\u0119cie b\u0119dzie wykorzystywa\u0142o kontrolk\u0119 dodawan\u0105 na formatk\u0119. Funkcja otwierania b\u0119dzie wykonana inaczej&#8230;<br \/><a class=\"read-more-button\" href=\"https:\/\/daniel.slask.pl\/m\/otwieranie-i-zapisywanie-plikow-w-c\/\">Wi\u0119cej<\/a><\/p>\n","protected":false},"author":1,"featured_media":1349,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,59],"tags":[192,191,193],"views":302,"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/daniel.slask.pl\/m\/wp-content\/uploads\/2020\/04\/Csh.png","jetpack_shortlink":"https:\/\/wp.me\/pcPgV3-iA","_links":{"self":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/1152"}],"collection":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/comments?post=1152"}],"version-history":[{"count":8,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/1152\/revisions"}],"predecessor-version":[{"id":1604,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/posts\/1152\/revisions\/1604"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media\/1349"}],"wp:attachment":[{"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/media?parent=1152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/categories?post=1152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/daniel.slask.pl\/m\/wp-json\/wp\/v2\/tags?post=1152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}