Pfad aus CSV lesen



  • Hallo zusmamen

    Bin neu hier habe mich erst seit einer Woche C++ gewidmet. Komme ursprünglich aus der SPS-Programmierung. Habe ein kleines Projekt zurechtgelegt und möchte diesem noch den Feinschliff geben.

    Folgendes kann das Programm bereits:
    Webcam öffnen und QR-Code erkennen. Den Inhalt wird dann in einer CSV-Datei in Spalte 1 gesucht und danach den Inhalt von Spalte 2 in derselben Zeile zurückgelesen. Dann schnippsle ich ein par zeichen zusammen und lasse den Ordner aus Spalte 2 öffnen. Das ganze kann ich bereits als. exe verpacken und installieren auf Windows.

    Folgendes will ich verbessern:
    Der Pfad an welcher das oben erwähnte CSV-File abgelegt ist habe ich "hardcoded" angegeben. Dies möchte ich gerne wie folt verbessern. Im Installationsordner soll ein File abglegt sein in welchem der Pfad angegeben ist.

    Ich habe es mit einem CSV versucht. Dies hat geklappt jedoch kann das File nicht geändert werden aus dem Windowsexplorer heraus mit Excel da es schreibgeschützt ist. Danach habe ich probiert eine zweite .exe zu schreiben welche dieses CSV File öffnet und man danach per Kommandozeile den Pfad angeben kann. Dieser kann ich jedoch nicht zurück ins File schreiben, denke dies liegt auch am Schreibschutz.

    Kann mir jemand ein Tipp geben wie ich die Datei im Installtionspfad nicht schreibgeschützt installiere oder wie man dies in C++ normalerweise lösen kann.

    Wurde ein recht grosser Post, hoffe dies ist soweit angebracht. Vielen Dank im vorraus für die Antworten.

    -freaak



  • @freaak Stell erstmal fest, warum es schreibgeschützt ist.

    Sind es Zugriffsrechte oder ist die Datei evtl. noch geöffnet?



  • @DirkB Wenn ich das Programm neuinstalliere und dann die CSV in Excel öffne, ohne die exe jemals auszuführen, und danach speichern will. Kommt die Fehlermeldung: Konnte nicht gespeichert werden, da schreibgeschützt.



  • @freaak Dann heb den Schreibschutz auf.

    Mit der rechten Maustaste Datei anclicken und im Menü Eigenschaften (ganz unten) auswählen.

    Unter „Allgemein“ gibt es eine Checkbox „Schreibgeschützt“ - die muss leer sein.

    Unter „Sicherheit“ kannst du die verfeinerten Rechte sehen - da sollte unten bei Schreiben ein Haken in der Spalte Zulassen sein.
    Wenn du keine Ahnung davon hast, lass die Finger davon.



  • Habe ich aufgehoben, funktioniert immernoch nicht. Selbe Meldung, habe jedem User die volle Berechtigung gegeben.



  • Und was genau soll das mit c++ zu tun haben, wenn Excel eine Datei nicht speichern kann?



  • Weil ich diese Datei mit Visual Studio in die Exe Installtionsdatei verpacke und die bei der Installation erstellt wird.

    Gibt es evtl. noch andere Wege ein Pfad dauerhaft zu speichern so das dieser geändert werden kann und der eingegebene Wert dauerhaft speichert?



  • @freaak sagte in Pfad aus CSV lesen:

    Im Installationsordner soll ein File abglegt sein in welchem der Pfad angegeben ist.

    Ich frage nur mal ganz dumm (weil ich dein Problem nicht verstanden habe): sollte so eine Konfiguration des Programms nicht ein User-Setting sein und somit überhaupt nichts im Programmpfad verloren haben, sondern z.B. in der Registry stehen oder eine Datei irgendwo unter %APPDATA% sein?

    Ein Tipp wie "Rechte umsetzen" kann meiner Meinung nach nicht zielführend sein.



  • Vieken Dank, genau solche antworten habe ich mir erhofft.

    Wie kann ich ein Registery eintrag machen? Finde leider keine guten Beispiele.



  • Die "Program Files" Verzeichnisse auf Windows erlauben nur Administratoren zu schreiben. Daher installiert man da normalerweise keine Settings-Files rein - ausser vielleicht welche die nach der Installation nicht mehr geändert werden.

    Je nachdem ob man die Settings global oder userspezifisch halten möchte, kann man sie entweder in %ProgramData% (global) oder %APPDATA% (userspezifisch) ablegen.

    Ich würde %APPDATA% empfehlen, dort sollte es nie Probleme mit Berechtigungen geben. Du kannst dort z.B. einfach ein Verzeichnis mit deinem Programmnamen anlegen, und darin ein Settings-File speichern. Um die Environment-Variable aufzulösen kannst du z.B. ExpandEnvironmentStrings verwenden.

    Registry wäre auch eine Möglichkeit. Ich persönlich würde aber eher ein Settings-File verwenden. Ist für den Anwender einfacher zu handhaben.


Anmelden zum Antworten