powershellbefehl in c++ ausführen



  • hi zusammen,

    meine aufgabe besteht darin in c++ dateien in einem ordner zu zählen. Das funktioniert jedoch mit c++ nicht so einfach. aber mit einem powershell command geht das ruckzuck. das problem ist aber jetzt ob ich einfach in c++ ein powershellbefehl ausführen kann der mir auch dann den output ausgibt. habt ihr da eine ahnung.

    mfg



  • Es wird vermutlich einfacher sein es direkt mit C++ zu machen.
    Was für ein Problem hast du denn mit std::filesystem?



  • @avci sagte in powershellbefehl in c++ ausführen:

    es wäre besser wenn ich das mit c++ mache, weil das nur ein Teil des Projekts ist. Dazu kommt noch die Ansteuerung von einem Relais, welches im Handbuch mit c++ gemacht wird.

    Das sagtest du in einem anderen Thread dazu.
    Dieser Lösungansatz ist vermutlich deutlich komplizierter als die Ursprungsaufgabe selbst.



  • @hustbaer ich stelle dir gerade mal die aufgabe vor: ich soll ein verzechnis überprüfen in dem Dateien immer wieder auftauchen und in diesem soll weniger als drei Dateien sein wenn da mehr wie drei dateien sidnd soll der mir eine meldung geben dass da mehr wie drei Dateien sind und das soll alle 15 minuten überprüft werden. ich habe da bisschen recherchiert aber keine hilfreiche antwort gefunden habe dann imer so codes gefunden dei dann nicht funktioniert haben und ähnliches vielleicht könnt ihr mir da mla was zusammen stellen oder einen lösunsansatz zeigen



  • Ich glaube das Problem ist einfach dass du nicht C++ kannst. Ich hab aber keine Lust das jetzt für dich zu programmieren. Wenn du C++ lernen willst, lern C++. Ansonsten darst du natürlich gerne weiter nach jemandem suchen der das für dich programmiert, aber ich werde mich da nicht beteiligen.

    BTW: Wenn es nicht unbedingt C++ sein muss, würde ich dir C# empfehlen. Das ist einfacher zu lernen als C++, speziell wenn du dich mal auf die nötigen Grundlagen beschränkst.
    Und Files in einem Verzeichnis zählen ist in C# ein 1-Zeiler.



  • @hustbaer das problem ist das später ein relais angesteuert wird und der im handbuch mit c++ programmiert worden ist deswegen besser wenn es c++ ist



  • @avci

    • Warum musst du das denn machen?
    • Wer hat dir gesagt, dass du das machen musst?
    • Warum glaubt derjenige, dass du das kannst?
    • Warum kannst du das nicht?

    Du hast bisher nicht eine einzige Zeile Code gezeigt, in der du überhaupt irgendetwas versuchst. So wird das hier nix...

    Edit:
    Oder stell´s in Projekte ein und biete Bezahlung an.



  • @avci sagte in powershellbefehl in c++ ausführen:

    @hustbaer das problem ist das später ein relais angesteuert wird und der im handbuch mit c++ programmiert worden ist deswegen besser wenn es c++ ist

    Du kannst auch das Zählen mit Powershell machen und aus Powershell heraus ein - zum Beispiel mit C++ erstelltes - Programm aufrufen.



  • @Belli richtig in powershell funktioniert das in 1-2 befehlen. deswegen ja dei frage wie ich ein powershell befehl in c++ ausführen kann



  • @DocShoe
    #include <iostream>
    #include <windows.h>

    using namespace std;

    int main()
    {
    WIN32_FIND_DATA FData;

    HANDLE hSearch = FindFirstFile("x\\y\\z\\", &FData);
    BOOL MoreFiles = FALSE;
    int cnt_dir = 0, cnt_file = 0;
    
    if (hSearch == INVALID_HANDLE_VALUE) return -1;
    
    do
    {
        // Ist das ein Ordner ?
        if (FData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
        {
            // Den Ordnernamen ausgeben        
            cout << "(Ordner) " << FData.cFileName << endl;
            cnt_dir++; // Ordnerzähler um 1 erhöhen
        }
    
        // Wenn nicht
        else
        {
            // Den Dateinamen ausgeben
            cout << "(Datei)  " << FData.cFileName << endl;
            cnt_file++; // Dateizähler um 1 erhöhen 
        }
    
        MoreFiles = FindNextFile(hSearch, &FData);
    } while (MoreFiles);
    
    FindClose(hSearch);
    
    cout << endl << "Insgesamt" << endl
        << "Ordner:  " << cnt_dir << endl
        << "Dateien: " << cnt_file;
    
    cin.get();
    return 0;
    

    }

    das hier ist der code den ich gerade stehen habe komischerweise sagt er dass es nicht funktioniert :Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler (aktiv) E0167 Das Argument vom Typ ""const char *"" ist mit dem Parameter vom Typ ""LPCWSTR"" inkompatibel. testhowis C:\Users\PDV\source\repos\testhowis\testhowis\main.cpp 10

    Schweregrad Code Beschreibung Projekt Datei Zeile Unterdrückungszustand
    Fehler C2664 "HANDLE FindFirstFileW(LPCWSTR,LPWIN32_FIND_DATAW)" : Konvertierung von Argument 1 von "const char [7]" in "LPCWSTR" nicht möglich testhowis C:\Users\PDV\source\repos\testhowis\testhowis\main.cpp 10

    diese fehlermeldung wird mir angezeigt aber auch ist das problem dass er mir nicht nicht alle dateien aufzählt. der code gibt mir nur aus ob der pfad zu einem ordner führt oder zu einer datei



  • @DocShoe hoffe du kannst mir jetzt weiterhelfen

    den timer habei ich noch nicht gecodet



  • Dein Projekt ist eine Unicode-Anwendung und erwartet Zeichenketten als wchar_t*. Du übergibst sie als ANSI-Zeichenketten. Dazu gibt es jetzt mehrere Lösungen:

    • du stellst deine Anwendung von Unicode auf ANSI um (muss iwo in den Projekteigenschaften einstellbar sein)
    • du übergibst Zeichenketten als wchar_t*, indem du den Präfix L voranstellst, also L"x\\y\\Z". Oder noch besser, du lässt das den Compiler für dich erledigen, das Visual Studio bietet dafür das TEXT Makro, das in Abhänigkeit der Projekteinstellungen entweder einen char* oder wchar_t* zurückgibt (TEXT("x\\y\\z") ).
    • du rufst explizit die ANSI Varianten der WINAPI Funktionen auf (FindFirstFileA, FindNextFileA, etc.)


  • @DocShoe Ich würde eher davon abraten die _T/_TEXT Makros und/oder die "ohne Suffix" Windows Funktionen (Makros) zu verwenden. Ausser in Projekten wo man wirklich eine ANSI und eine UNICODE Konfiguration hat, und diese auch beide regelmässig gebaut und getestet werden. Sonst kommt bloss ein Programm raus was grossteils so aussieht als ob man es mit ANSI und UNICODE bauen könnte, aber in Wirklichkeit funktioniert dann doch bloss eine Variante.

    Und da es keine relevanten Windows Versionen mehr gibt die die UNICODE APIs nicht unterstützen, wäre mein Rat: Explizit die W Funktionen aufrufen und alles mit wchar_t/L"..." machen.

    (Abgesehen davon dass ich persönlich hier vermutlich eher std::filesystem verwenden würde.)




Log in to reply