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

Zapis parametrów komputera z CMD do pliku

Aruba Cloud - Virtual Private Server VPS
0 głosów
430 wizyt
pytanie zadane 9 sierpnia 2023 w C i C++ przez Osky Nowicjusz (120 p.)

Chciałbym wypisać informacje do pliku o sprzęcie w komputerze, plik się zapisuje ale wszędzie jest wartość NULL

#include <iostream>
#include <fstream>

using namespace std;

string os, os_language, baseboard, baseboard_version, gpu;

int main()
{
    cout << "[System operacyjny oraz jezyk systemu]" << endl;
                   os = system("wmic os get Caption");
          os_language = system("wmic os get OSLanguage");
    cout << "[Model plyty glownej oraz wersja]" << endl;
            baseboard = system("wmic baseboard get Product");
    baseboard_version = system("wmic baseboard get Version");
    cout << "[Model karty graficznej]" << endl;
                  gpu = system("wmic path win32_VideoController get name");

    fstream info_o_systemie;
    info_o_systemie.open("info.txt",ios::out);

    info_o_systemie << os << endl;
    info_o_systemie << os_language << endl;
    info_o_systemie << baseboard << endl;
    info_o_systemie << baseboard_version << endl;
    info_o_systemie << gpu << endl;

    info_o_systemie.close();


    return 0;
}

 

komentarz 9 sierpnia 2023 przez tkz Nałogowiec (42,020 p.)

1 odpowiedź

0 głosów
odpowiedź 9 sierpnia 2023 przez Oscar Nałogowiec (29,340 p.)
W związku z komentarzem tkz zapytam, czy to się w ogóle kompiluje?

Zasadniczo są dwa rozwiązania - albo polecenia do systemu od razu przekierujesz do pliku (pierwszy raz używając '>', a następne razy '>>'), albo użyjesz funkcji popen. Dziala jak fopen (a więc na plikach w stylu "C"), tylko zamiast nazwy pliku podaje się polecenie. Jeśli otwarcie jest w trybie odczytu - z otwartego pliku/uchwytu można czytać wyniki polecenia, jeśli w trybie zapisu - można podawać dane dla uruchomionego polecenia. Jest też metoda kontroli zarówno wyników jak i danych wejściowych, ale to już jest bardziej skomplikowane niż 1 funkcja. Przypuszczam, że tzw "modern C++" ma już swoją nakładkę na taką funkcjonalność.
komentarz 9 sierpnia 2023 przez j23 Mędrzec (195,240 p.)
edycja 9 sierpnia 2023 przez j23

Mowa o Windowsie, więc nie popen a CreateProcess z ustawionymi potokami (CreatePipe) i/o.

PS. w zasadzie jest API do WMI, które daje dostęp do wszystkich informacji systemowych. Chociaż wydaje mi się, że użycie go może być zbyt skomplikowane dla początkującego.

komentarz 10 sierpnia 2023 przez Osky Nowicjusz (120 p.)
Tak, kompiluje się.

Właśnie miałem napisać, że udało mi się to zrobić jako komendę CMD z użyciem ">". Tylko teraz napotkałem kolejny problem, bo teraz program nie chce tego odczytać. Z tego co widzę, to przez kodowanie, w którym zapisuje CMD. Czy jest jakiś sposób na zmianę kodowania przy zapisie z konsoli? Próbowałem polecenia "chcp 65001" ale niestety wciąż zapisuje w kodowaniu domyślnym, czyli z tego, co wyczytałem, "Windows-1252".
komentarz 10 sierpnia 2023 przez j23 Mędrzec (195,240 p.)
A jak w konsoli wykonujesz tę komendę, to wyświetla się poprawnie?
komentarz 10 sierpnia 2023 przez Oscar Nałogowiec (29,340 p.)

@j23, Nie mam pod ręką żadnego Windows dla sprawdzenia, ale sprawdziłem że popen jest w stdio.h więc uznałem że jest w standarcie. Faktycznie, w sieci wspominają o tej funkcji w kontekście Linuxa ale na stronie Microsoftu znalazłem następujący przykład:

    if ((pPipe = _popen("dir *.c /on /p", "rt")) == NULL)
    {
        exit(1);
    }

 

komentarz 10 sierpnia 2023 przez j23 Mędrzec (195,240 p.)
Nawet nie wiedziałem, że Microsoft dodał swoją wersję tej funkcji. Dobrze wiedzieć ;)

Ciekawe jak z dostępnością tej funkcji na MinGW.

Podobne pytania

0 głosów
2 odpowiedzi 1,754 wizyt
+1 głos
2 odpowiedzi 322 wizyt
pytanie zadane 10 kwietnia 2024 w Python przez wojtas29321932942 Początkujący (410 p.)
0 głosów
2 odpowiedzi 1,073 wizyt
pytanie zadane 28 kwietnia 2015 w Systemy operacyjne, programy przez eVeezu Użytkownik (880 p.)

93,327 zapytań

142,325 odpowiedzi

322,396 komentarzy

62,657 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!

...