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

Program do tworzenia dokumentu tekstowego.

VPS Starter Arubacloud
0 głosów
355 wizyt
pytanie zadane 20 marca 2018 w C i C++ przez FaloY Bywalec (2,180 p.)

Witam, mam problem z tym kodem, otoz chcialbym aby tworzyl on folder (to juz mam za soba) ale jak zrobic aby tworzyl on dokument tekstowy w TYM folderze?


#include <iostream>
#include <windows.h>
 
using namespace std;
 
int main ()
{
  char sciezka[260];
  cout<<"Podaj ścieżkę: ";
  gets(sciezka);
 
  CreateDirectoryA(sciezka, NULL);
 
  cin.get();
  return 0;
}

Pozdro! ;D

1 odpowiedź

+1 głos
odpowiedź 20 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
wybrane 25 marca 2018 przez FaloY
 
Najlepsza
1. Kultura programisty - przewidzenie każdego błędy, czyli "jeżeli nie udało się utworzyć folderu..."

2a. Sprawdzasz czy na końcu ścieżki jest '\' jeśli jest, to do końca ścieżki dodajesz nazwe pliku tekstowego i tworzysz obiekt ofstream (jeżeli plik nie istnieje to zostanie utworzony)

2b. Jeśli na końcu ścieżki nie ma '\'. To dodajesz ten znak i dalej to samo.

 

 

Jeśli chcesz jakiś przykład, pisz.
komentarz 20 marca 2018 przez FaloY Bywalec (2,180 p.)
Jak byś był taki miły, to poproszę :D
komentarz 25 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
#include <iostream>
#include <Windows.h> //Żeby móc korzystać z windowsowych funkcji, wiadomo.
#include <stdio.h> //gets i strcat
#include <fstream> //Tworzenie pliku
#include <thread> //czekanie
#include <chrono> //również czekanie

using namespace std;

int main(){
    /* WinApi ma bardzo wiele funkcji, które umożliwiają baaaardzo wiele.
       WinApi m.in umożliwia manipulowanie oknami, tworzenie własnych okien,
       I wieeeeeeele, wiele innych.
       Tutaj chciałbym Ci pomóc z Twoim problemem. Daje Ci ten kod. Będzie on z opisami.
    */


    char buffer[MAX_PATH];                           // Tworzymy tablicę na przechowywanie aktualnej ścieżki. MAX_PATH wynosi 260
    GetCurrentDirectory(MAX_PATH, buffer);           // GetCurrentDirectory(A) pierwszy argument wielkość bufora, drugi bufor


    cout<<"pre: "<<buffer<<endl;                    // Jeśli nie ustawimy za pomocą SetCurrentDirectory ścieżki,
                                                    // to domyślną będzie ścieżka skąd został uruchomiony nasz program.

    SetCurrentDirectory("C:\\Windows\\System32");   // Przyjmuje LPCSTR. W WinApi wszystko zaczynające się na L lub LP to wskaźnik.
                                                    // Jak się pewnie domyślasz STR to string. A więc np.

                                                    // string str = "C:\Windows\System32";
                                                    // SetCurrentDirectory(str.c_str);

                                                    // c_str to metoda klasy string zwracająca bufor do tablicy charow z naszym napisem.
                                                    // Równie dobrze może tu być tablica charów
                                                    // Należy pamiętać o podwójnych slashach (\) ponieważ jest to znak ucieczki
    GetCurrentDirectory(MAX_PATH, buffer);
    cout<<"post: "<<buffer<<endl;


    //Twój problem wygląda tak, że chcesz utworzyć jakiś folder, następnie utworzyć w nim plik.

    char buff[260];                         //Tutaj równie dobrze można by było użyć stringa
    cout<<"Podaj sciezke: "<<endl;

    gets(buff);                             //a tu getline'a
    cout<<buff<<endl;

     //      CreateDirectory(buff, NULL) ? cout<<"Folder utworzony pomyslnie" : cout<<"Nie udalo sie utworzyc folderu";
    /* Tutaj bardzo przydatna rzecz, jednakże w zasadzie w tym momencie nie porządana. Zapis u góry jest równoznaczny z:

    if(CreateDirectory(buff, NULL)){
        cout<<"Folder utworzony pomyslnie";
    }else{
        cout<<"Nie udalo sie utworzyc folderu";
    }

    zapis ten pozwala zapisac tylko jedna instrukcje, np jeden cout.
    Jak pisałem, zapis ten jest tu nieporządany dlaczego? Może dlatego: */

    if(CreateDirectory(buff, NULL)){
        cout<<"Folder utworzony pomyslnie"<<endl;
    }else{
        cout<<"Nie udalo sie utworzyc folderu"<<endl;     //Jesli nie jestes na koncie z adminem i program nie jest uruchomiony z uprawnieniami admina
                                                    //To nie uda sie utworzyc folderu, bo jestesmy w C:\Windows\System32. Zmien sobie ta lokalizacje
                                                    //np na pulpit
        this_thread::sleep_for(chrono::seconds(2)); //chyba wiadomo co tu się dzieje. Znacznie precyzyjniejsze od Sleep();
        return 1;                                   //zwracam wartosc inna niz 0, czyli ze cos poszlo nie tak
    }

    /*
     I teraz tworzenie tego pliku. Sorry, za taką długą naukę zamiast przejście do sedna.
     GetCurrentDirectory zawsze zwraca ścieżkę bez slasha (\) na końcu, więc to co napisałem na forum dyćko mija się z prawdą.
     teraz, żeby utworzyć plik:
    */

    strcat(buff, "\\plik.txt");                     //strcat funkcja która dodaje do tablicy charow jakies inne znaki.

    ofstream stream(buff);                          //Plik utworzy się sam, jeśli nie istnieje

    if(!stream.is_open()){
        cout<<"Nie mozna utworzyc pliku"<<endl;
        this_thread::sleep_for(chrono::seconds(2));
        return 3;                                   //zwracam wartosc inna niz 0, czyli ze cos poszlo nie tak
    }else{
        cout<<"Plik utworzony pomyslnie"<<endl;
    }


    //Tutaj ogólnie przydałoby się rozdzielić to na kilka funkcji, dac uzytkownikowi druga szanse na wpisanie sciezki itd. ale jak na razie jest tyle
    // Mam nadzieje, ze pomoglem.





    //PS musisz kompilowac ze standardem min. c++11. Najnowszy standard to c++17.

}

 

komentarz 25 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
Fajnie, że mogłem pomóc.
komentarz 25 marca 2018 przez FaloY Bywalec (2,180 p.)
Dzięki za poświęcony czas dla mnie! ;D
komentarz 25 marca 2018 przez Hiskiel Pasjonat (22,830 p.)
Nie ma sprawy. Po to tu jestem, żeby m.in pomagać.

Podobne pytania

0 głosów
2 odpowiedzi 126 wizyt
pytanie zadane 5 czerwca 2019 w Grafika i multimedia przez Michał Wojtaś Obywatel (1,080 p.)
0 głosów
1 odpowiedź 820 wizyt
pytanie zadane 23 marca 2018 w Systemy operacyjne, programy przez KacperO Nowicjusz (210 p.)
0 głosów
1 odpowiedź 284 wizyt
pytanie zadane 2 kwietnia 2021 w Offtop przez JakSky Stary wyjadacz (14,770 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...