• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed C# FileStream wprowadzanie danych do pliku

Aruba Cloud - Virtual Private Server VPS
+1 głos
700 wizyt
pytanie zadane 26 sierpnia 2020 w C# przez Nabuchadonozor Gaduła (3,120 p.)
zamknięte 30 sierpnia 2020 przez Nabuchadonozor

Serwus Forumowicze,

otóż przesiadłem się z C++ na C# i napotkałem pewną zagwostkę, której nie mogę samemu rozwiązać.

Wie ktoś może, jak przekształcić poniższy kod, tak by można było wprowadzić prosty napis (string) do pliku?

namespace FS
{
    class Program
    {
        static void Main(string[] args)
        {
            string path = AppDomain.CurrentDomain.BaseDirectory + "/test.txt";


            FileStream fs = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.Write);

            fs.Close();
        }
    }
}

Tak jak np. w C++ "file << "przykladowy text" << endl; ", tylko jak to zrobić w C#, nie mogę tego rozgryźć...

Proszę o pomoc ;)

komentarz zamknięcia: Wyjaśnione poniżej ;)

2 odpowiedzi

+1 głos
odpowiedź 26 sierpnia 2020 przez VBService Ekspert (256,600 p.)
edycja 28 sierpnia 2020 przez VBService
 
Najlepsza

Do szybkiego zapisuwink

using System;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

namespace FS
{
    class Program
    {
        static void Main(string[] args)
        {
            string app_path = AppDomain.CurrentDomain.BaseDirectory;
            string path_1 = app_path + "test1.txt";
            string path_2 = app_path + "test2.txt";
            string path_3 = app_path + "test3.txt";
            string path_4 = app_path + "test4.txt";
            string path_5 = app_path + "test5.txt";

            // TEST 1
            string text = "1. Lorem ipsum dolor sit amet, consectetur adipiscing\n";
                   text += "2. Lorem ipsum dolor sit amet, consectetur adipiscing\n";
            File.WriteAllText(path_1, text);

            // TEST 2
            text = @"3. Lorem ipsum dolor sit amet, consectetur adipiscing, vestibulum ante ipsum
                     4. Lorem ipsum dolor sit amet, consectetur adipiscing, vestibulum ante ipsum 
                     5. Lorem ipsum dolor sit amet, consectetur adipiscing, primis in faucibus orci luctus et";
            text = Regex.Replace(text, @"\s+", " ") + "\n";
            text += "6. Vestibulum ante ipsum\n";
            File.WriteAllText(path_2, text);

            // TEST 3
            int a = 10, b = 20;
            double c = 0.5, d = 6.75;
            text = string.Format("Dodawanie: {0} + {1} = {2}", a, b, (a+b)) + "\n";
            text += string.Format("Dzielenie: {0} / {1} = {2}", d, c, (d/c)) + "\n";
            File.WriteAllText(path_3, text);

            // TEST 4
            string[] lines = {"7. Vestibulum ante ipsum","8. primis in faucibus orci luctus et"}; 
            File.WriteAllLines(path_4, lines);

            // TEST 5
            text = "Ąą Ćć Ęę Łł Ńń Óó Śś Żż Źź\n\\n \\ !@#$%^&*()_+=-[]{};:'\",.<>?|/`~";
            byte[] data = Encoding.UTF8.GetBytes(text);
            File.WriteAllBytes(path_5, data);

            Console.WriteLine("Dane zostały zapisane");
            Console.ReadKey();            
        }
    }
}

C# write text files ]
FileStream Vs System.IO.File.WriteAllText when writing to files ]
Break Long code lines in Visual Studio ]
6 Effective Ways To Concatenate Strings In C# ]

komentarz 28 sierpnia 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Dziękuję ślicznie! Zaraz przestudiuję ten kod i linki ;)
1
komentarz 28 sierpnia 2020 przez Nabuchadonozor Gaduła (3,120 p.)
O taką odpowiedź właśnie mi chodziło, trafiłeś w dziesiątkę! Jeszcze raz bardzo dziękuję! :)
–2 głosów
odpowiedź 26 sierpnia 2020 przez JakSky Stary wyjadacz (14,770 p.)
string path = @"C:\temp\file"; // path to file
using (FileStream fs = File.Create(path)) 
{
       
        string dataasstring = "data"; //your data
        byte[] info = new UTF8Encoding(true).GetBytes(dataasstring);
        fs.Write(info, 0, info.Length);
}

Przykład z dokumentacji 

komentarz 26 sierpnia 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Dziękuję za odpowiedź, ale to już widziałem. Bardziej mi chodziło o to, czy jest jakiś prostszy, szybszy i czytelniejszy kod, niż ten podany w dokumentacji?
komentarz 26 sierpnia 2020 przez JakSky Stary wyjadacz (14,770 p.)
To tylko 5 linijek. Zbytnio nie da się tego jeszcze bardziej skrócić. :)
komentarz 26 sierpnia 2020 przez Nabuchadonozor Gaduła (3,120 p.)
FileStream fs = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
byte[] info = new UTF8Encoding(true).GetBytes("xdaś");
fs.Write(info, 0, info.Length);

Z pięciu zrobiły się już trzy (dwie pierwsze to jedna, tylko, że tu się nie mieści). Może ma ktoś jakiś pomysł jeszcze?

1
komentarz 26 sierpnia 2020 przez JakSky Stary wyjadacz (14,770 p.)
Zgubiłeś usinga :) Tak swoją drogą gdybyś chciał to zrobić w produkcyjnym kodzie to musisz dodać jeszcze sporo kodu. Między innymi obsługę wyjątków czy sprawdzenie dostępności ścieżki pliku oraz nazwy.
komentarz 26 sierpnia 2020 przez adrian17 Mentor (352,580 p.)

Zbytnio nie da się tego jeszcze bardziej skrócić. :)

Patrz druga odpowiedź.

komentarz 26 sierpnia 2020 przez JakSky Stary wyjadacz (14,770 p.)
Faktyczne skrócił :) 33 linijki...
1
komentarz 26 sierpnia 2020 przez adrian17 Mentor (352,580 p.)

Bo dał kilka różnych przykładów na raz?

using (FileStream fs = File.Create(path)) 
{
        string dataasstring = "data"; //your data
        byte[] info = new UTF8Encoding(true).GetBytes(dataasstring);
        fs.Write(info, 0, info.Length);
}

->

string dataasstring = "data"; //your data
file.WriteAllText(path, dataasstring);

 

komentarz 28 sierpnia 2020 przez Nabuchadonozor Gaduła (3,120 p.)

Dziękuję wszystkim za odpowiedzi! Jeszcze jedno pytanko mam - wie ktoś może, po co używać tego using'a, jeśli bez niego ten kod poniższy działa?

FileStream fs = new FileStream("test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
byte[] info = new UTF8Encoding(true).GetBytes("xdaś");
fs.Write(info, 0, info.Length);

 

komentarz 28 sierpnia 2020 przez VBService Ekspert (256,600 p.)
edycja 28 sierpnia 2020 przez VBService

Języki programowania są tak elastyczne jak klocki (używają tych samych klocków, możesz zbudować wiele różnych konstrukcji), tak w programowaniu, możesz ten sam problem rozwiązać na różne sposoby, wtedy jest brane pod uwagę np.: czytelność kodu, jego długość (ile użyłeś instrukcji), szybkość działania, złożoność itd. Podam tu świeży przykład z przed 3 dni na naszym forum: Ciąg Fibbonaciego

Zaczęliśmy od tego wink

Utwórz pustą tablicę. Dodaj pierwsze 7 liczb ciągu Fibonacciego za pomocą metod Arrays i wyświetl te liczby jeden po drugim.

let sequFibo = new Array();
modifiedChain = sequFibo.push(1,1,2,3,5,8,13);
let firstElement = console.log(sequFibo[0]);
let secondElement = console.log(sequFibo[1]);
let thirdElement = console.log(sequFibo[2]);
let fourthElement = console.log(sequFibo[3]);
let fifthElement = console.log(sequFibo[4]);
let sixthElement = console.log(sequFibo[5]);
let seventhElement = console.log(sequFibo[6]);

po drodze było też wink

@argeentoKiedy robisz dokładnie to, o co proszą w zadaniu:

 

// Utwórz pustą tablicę. 
[];
 
// Dodaj pierwsze 7 liczb ciągu Fibonacciego za pomocą metod Arrays
Array.prototype.map.length + Array.prototype.map.length + Array.of.name.length + Array.prototype.map.name.length + Array.prototype.slice.name.length + Array.prototype.unshift.name.length;
 
// wyświetl te liczby jeden po drugim
console.log('1 1 2 3 5 8 13');

a skończyło się wink

Uwielbiam javascript (jedna linia kodu - codepenlaugh:

 

console.log( [1,1,2,3,5,8,13].join(' ') );

[ Edit ]

@JakSky, dzięki za linka wink : SŁOWO KLUCZOWE USING - C#

komentarz 28 sierpnia 2020 przez Nabuchadonozor Gaduła (3,120 p.)
I dlatego właśnie poszukuje jak najkrótszych zapisów, które też będą oczywiście czytelne, tak jak w tym przykładzie, który podałeś wyżej :) Ale nadal nie jestem pewien co do odpowiedzi na pytanie dwa komentarze wyżej :/ Ale sugeruję sobie sam odpowiedź, iż jeśli program działa, to using nie będzie potrzebny, tak jak napisał "JakSky" w komentarzu... ;)
komentarz 28 sierpnia 2020 przez JakSky Stary wyjadacz (14,770 p.)

Ale sugeruję sobie sam odpowiedź, iż jeśli program działa, to using nie będzie potrzebny

Tu jesteś w błędzie. Oczywiście, że program będzie działał. Ale przy mocno obniżonej pamięci pojawić się może spadek wydajności. Do czego służy using polecam zajrzeć do dokumentacji.

 

komentarz 28 sierpnia 2020 przez adrian17 Mentor (352,580 p.)
Niezbyt rozumiem, gdzie tutaj pamięć/wydajność wchodzi w grę.
komentarz 28 sierpnia 2020 przez JakSky Stary wyjadacz (14,770 p.)
Tu jest fajny przykład dlaczego warto używać using:

http://www.pzielinski.com/?p=1050 Co prawda nie dotyczy wydajności(o tym można poczytać w dokumentacji).
komentarz 30 sierpnia 2020 przez Nabuchadonozor Gaduła (3,120 p.)
Dzięki wielkie za linka!

Podobne pytania

0 głosów
1 odpowiedź 343 wizyt
pytanie zadane 17 lipca 2018 w Java przez Kabuuz Bywalec (2,820 p.)
0 głosów
1 odpowiedź 577 wizyt
pytanie zadane 27 czerwca 2022 w C i C++ przez sushi2021 Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 518 wizyt
pytanie zadane 10 listopada 2015 w C i C++ przez Evelek Nałogowiec (28,960 p.)

93,324 zapytań

142,323 odpowiedzi

322,390 komentarzy

62,653 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...