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

Program do tworzenia dokumentu tekstowego.

0 głosów
71 wizyt
pytanie zadane 20 marca 2018 w C i C++ przez FaloY Obywatel (1,140 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,880 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 Obywatel (1,140 p.)
Jak byś był taki miły, to poproszę :D
komentarz 25 marca 2018 przez Hiskiel Pasjonat (22,880 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,880 p.)
Fajnie, że mogłem pomóc.
komentarz 25 marca 2018 przez FaloY Obywatel (1,140 p.)
Dzięki za poświęcony czas dla mnie! ;D
komentarz 25 marca 2018 przez Hiskiel Pasjonat (22,880 p.)
Nie ma sprawy. Po to tu jestem, żeby m.in pomagać.

Podobne pytania

0 głosów
2 odpowiedzi 44 wizyt
pytanie zadane 5 czerwca w Grafika i multimedia przez Michał Wojtaś Użytkownik (880 p.)
0 głosów
1 odpowiedź 139 wizyt
pytanie zadane 23 marca 2018 w Systemy operacyjne, programy przez KacperO Nowicjusz (210 p.)
0 głosów
1 odpowiedź 67 wizyt
Porady nie od parady
Zadając pytanie postaraj się o poprawną pisownię i czytelne formatowanie tekstu.Kompozycja

64,043 zapytań

110,434 odpowiedzi

231,279 komentarzy

47,815 pasjonatów

Przeglądających: 170
Pasjonatów: 2 Gości: 168

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...