|
|
Ordnerzugriff aus einer Windows Standalone App |
|
TomF |
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 24.09.2017, 17:29
Titel: Ordnerzugriff aus einer Windows Standalone App
|
|
|
|
|
Hallo zusammen,
ich habe im Ramen meiner Bachelorarbeit ein Programm (FlexStrength.exe) geschrieben, welches ich dann mit Hilfe eines GUI mit einer Benutzeroberfläche versehen habe. Dieses habe ich dann als Windows Standalone Application exportiert.
Zu meinem Problem:
In dem ursprünglichen Code gab es einen Ordner "models", in dem man Bauteile abspeichern und dann mit dem Programm einlesen und berechnen konnte (vgl. Bild: Ordnerstruktur)
Jodch ist dieser Ordner, bzw. der Zugriff darauf in der fertigen App nicht mehr möglich.
Damit dieser Ordner beim Start der App erstellt wird habe ich folgendes am Anfang meiner Hauptdatei eingefügt:
Das Programm erkennt diesen Ordner jedoch nicht, bzw. die Modeldateien in diesem nicht, auch wenn er existiert. (vgl. Bild: ordner_programm)
Was muss ich tun, um meinem Programm zu sagen, ess soll bitte die entsprechende datei mit dem Namen "model1" z.B. aus diesem Ordner einlesen?
Vielen Dank für jede Hilfe im Vorraus und bitte entschuldigt die eventuell etwas wirre Problemschilderung.
Beschreibung: |
|
Download |
Dateiname: |
ordnerstruktur.PNG |
Dateigröße: |
8.88 KB |
Heruntergeladen: |
389 mal |
Beschreibung: |
|
Download |
Dateiname: |
ordner_programm.PNG |
Dateigröße: |
14.53 KB |
Heruntergeladen: |
411 mal |
_________________
Beste Grüße
TomF
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.09.2017, 19:19
Titel:
|
|
Hallo,
Zitat: |
Jodch ist dieser Ordner, bzw. der Zugriff darauf in der fertigen App nicht mehr möglich. |
Wie versuchst du denn darauf zuzugreifen?
Mögliche Abhilfe:
a) den vollständigen Pfad angeben
b) das Verzeichnis zum Suchpfad hinzufügen (
addpath
)
Grüße,
Harald
|
|
|
TomF |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 24.09.2017, 19:33
Titel:
|
|
Hallo und Danke für die Antwort,
ich habe alle subfolder hinzugefügt:
und greife dann über handles auf den Inhalt eines "edit text box" zu:
dass funktioniert auch, sofern ich das programm in matlab ausführe, oder den Ordner "models" und die beinhalteten "member" mit exportieren lasse, jedoch möchte ich dem Nutzer ermöglichen in genau diesem Ordner eigene Bauteile ablegen zu können um sie dann zu berechnen. Dieser Ordner ist allerdings in der App nicht mehr zu finden, bzw. werden Dateien in dem zu Beginn neu erstellten Ordner nicht erkannt.
_________________
Beste Grüße
TomF
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 24.09.2017, 19:56
Titel:
|
|
Hallo,
der Befehl fügt alle momentanen Unterordner hinzu. Führst du denn den Befehl auch aus, nachdem du den Ordner erstellt hast?
Viel mehr als vorher weiß ich nun leider nicht. Was können denn die member_select-Werte sein? Sind das MATLAB-Dateien, Simulink-Dateien, oder was? Was für dich ein "Bauteil" ist, weiß ich nicht und hier möglicherweise auch sonst niemand.
Grüße,
Harald
|
|
|
TomF |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 24.09.2017, 20:19
Titel:
|
|
Hallo Harald,
Wie gesagt, sry für die Verwirrung, ich versuche mal ein wenig Licht in die Sache zu bringen:
Ein Bauteil ("member") ist eine struct-variable mit Werten wie:
Diese werden vom Benutzer erstellt und als member3.m z.B. im Ordner models gespeichert. Im eigentlichen Programm muss der User dann im Feld "select member" den Namen eingeben (z.B." member3"). Dieser wird dann wie oben beschrieben über die handles ausgelesen und soll dann in den workspace geladen werden.
Dies funktioniert in Matlab, aber nicht in der App, weil dort der Ordner anscheinend nicht erkannt wird.
den addpath-Befehl habe ich aber nach der Erstellung der Ordner ausgeführt, sodass diese eigentlich auch erkannt werden sollten.
Ich hoffe, dass es jetzzt ein bisschen verständlicher geworden ist und bedanke mich für die Hilfe!
Beschreibung: |
|
Download |
Dateiname: |
gui.PNG |
Dateigröße: |
50.61 KB |
Heruntergeladen: |
415 mal |
_________________
Beste Grüße
TomF
|
|
|
TomF |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 25.09.2017, 11:31
Titel:
|
|
|
|
|
Hallo nochmal,
nach einigen weiteren Probeläufen habe ich mich mitlerweile für folgende "Lösung" entschieden:
dadurch ist es mir möglich die Bauteile (member) aus einem beliebigen Ordner einzulesen. Dies funktioniert in Matlab hervorragend und genau wie es soll, allerdings nicht in der standalone App...
Ich weiß einfach nicht mehr weiter und verstehe es nicht. Das Problem ist auch, das ich nur einen Errorton höre und sehe, dass eben nichts passiert, aber nicht weiß, wo ich die Errormeldungen finde.
Besten Dank an euch und ich habe mal den installer hochgeladen, falls das hilft:
https://www.dropbox.com/s/nxeu2kznm.....AppInstaller_web.exe?dl=0
Sobald das Programm das erste mal gestartet wurde, werden zwei Ordner "models" und "results" erstellt. In den models Ordner kann man dann member1.m ablegen und es über den "Browse"-Button im Programm einladen - soweit die Theorie....
Beschreibung: |
|
Download |
Dateiname: |
member1.m |
Dateigröße: |
8.4 KB |
Heruntergeladen: |
393 mal |
_________________
Beste Grüße
TomF
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.09.2017, 11:51
Titel:
|
|
Hallo,
Zitat: |
Das Problem ist auch, das ich nur einen Errorton höre und sehe, dass eben nichts passiert, aber nicht weiß, wo ich die Errormeldungen finde. |
Dieses Problem sollte sich lösen lassen, indem du die Anwendung aus einer Betriebssystemkonsole (cmd) startest statt per Doppelklick.
Grüße,
Harald
|
|
|
TomF |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 25.09.2017, 12:33
Titel:
|
|
|
|
|
Danke Harald,
traurig, dass ich da nicht selbst drauf gekommen bin...
Mittlerweile habe ich schon ein paar Errormeldungen beheben können, doch an dieser komme ich nciht weiter. Der Code sieht wie folgt aus
Die Errormeldung dazu:
ans =
Figure (figure1) with properties:
Number: []
Name: 'FlexStrengthGUI'
Color: [0.9400 0.9400 0.9400]
Position: [135.8000 13.8462 170.4000 64.6923]
Units: 'characters'
Use GET to show all properties
. .. member1.m
Cannot find an exact (case-sensitive) match for 'String'
The closest match is: string in C:\Program Files\MATLAB\R2016b\mcr\toolbox\matlab\strfun\@string\string.m
Error in FlexStrengthGUI>button_choose_file_Callback (line 346)
Error in gui_mainfcn (line 95)
Error in FlexStrengthGUI (line 45)
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)FlexStrengthGUI('button_choose_file_Callback',hObject,eventdata,guidata(hObject))
Error using waitforallfiguresclosed (line 20)
Error while evaluating UIControl Callback
Der Code sollte so ausführbar sein und in Matlab keine Probleme hervorrufen, nur in der standalone.
_________________
Beste Grüße
TomF
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.09.2017, 15:52
Titel:
|
|
Hallo,
ich würde eval generell vermeiden, da es meist mehr Probleme verursacht als es löst. Vor allem nutzt du eval mit zwei Eingabeargumenten. Das ist so nicht dokumentiert, und mir ist auch nicht klar, was es bezweckt.
Grüße,
Harald
|
|
|
TomF |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 25.09.2017, 16:17
Titel:
|
|
Hallo,
den String-Zusatz im eval-Befehl habe ich schon entfernt, allerdings wird jetzt die member-Datein nicht mehr gefunden.
Gibt es denn eine sinnvolle und zweckmäßige alternative zu eval? Run funktioniert nicht und load geht ja nur bei .mat Dateien.
Im Endeffekt muss es nur möglich sein eine vom user erstellte Datei einzulesen, die dann im programm über member.variableA oder member.variableB usw. genutzt werden kann.
Besten Dank Harald
_________________
Beste Grüße
TomF
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 25.09.2017, 18:09
Titel:
|
|
Hallo,
ein Function Handle würde eval vermeiden.
Um aus einem String ein Function Handle zu machen, hilft str2func.
Ich würde mir auch mal mit path den Suchpfad ansehen um zu schauen, ob das Hinzufügen aus welchen Gründen auch immer nicht geklappt hat, oder das Finden im Pfad.
Grüße,
Harald
|
|
|
TomF |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 26.09.2017, 12:05
Titel:
|
|
|
|
|
Vielen Dank für den Hinweis, ich habe eval durch str2func ersetzt und in Matlab seolber funktioniert alles einwandfrei.
Wenn ich foedoch die exe ausführe spuckt mir die cmd folgende Errormeldung aus:
ans =
Figure (figure1) with properties:
Number: []
Name: 'FlexStrengthGUI'
Color: [0.9400 0.9400 0.9400]
Position: [135.8000 13.8462 170.4000 64.6923]
Units: 'characters'
Use GET to show all properties
Undefined function or variable 'member1'.
Error in FlexStrengthGUI>button_choose_file_Callback (line 354)
Error in gui_mainfcn (line 95)
Error in FlexStrengthGUI (line 45)
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)FlexStrengthGUI('button_choose_file_Callback',hObject,eventdata,guidata(hObject))
Error using waitforallfiguresclosed (line 20)
Error while evaluating UIControl Callback
Es muss doch aber mögliche seine eine .m-file einlesen und ausführen zu können ind der standalone. Im Endeffekt muss ich nur diese member-variablen irgendwie in den workspace der App bekommen...
_________________
Beste Grüße
TomF
|
|
|
TomF |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 26.09.2017, 13:14
Titel:
|
|
Hallo nochmal,
ich bin mitlerweile daruaf umgestiegen, die member datei als .mat Datei einzuleden und dies funktioniert auch in der standalone.
Jedoch gibt es jetzt ein neues Problem, nämlich dass der user auch ohne Matlab (nur mit MCR) diese mat files erstellen können muss...
Dies werde ich aber an passender Stelle erfragen.
Vielen Danke für die Hilfe bis hier hin!
_________________
Beste Grüße
TomF
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 26.09.2017, 17:51
Titel:
|
|
Hallo TomF,
Und bist Du sicher, dass "pwd" der Ordner ist, in dem das Executable File liegt?
Zitat: |
ich habe alle subfolder hinzugefügt:
|
Das ist eine gewagte Idee. Ich würde nicht den Matlab-Pfad großzügig ändern, sondern lieber den absoluten Pfad zu den Dateien angeben.
Was soll denn "eval(member_select, 'String')" tun? EVAL wertet doch einen übergebenen String als Code aus. Was steht denn dann in "member_select"? Und was macht der 2. Input Parameter? Der ist bei EVAL doch gar nicht erlaubt?
Zitat: |
dass funktioniert auch, sofern ich das programm in matlab ausführe, |
Bist Du da sicher?
Zitat: |
bzw. werden Dateien in dem zu Beginn neu erstellten Ordner nicht erkannt. |
Was heißt "werden nicht erkannt" genau? Was geschieht denn?
Gruß, Jan
|
|
|
TomF |
Themenstarter
Forum-Anfänger
|
|
Beiträge: 15
|
|
|
|
Anmeldedatum: 22.02.17
|
|
|
|
Wohnort: Hannover
|
|
|
|
Version: R2016b
|
|
|
|
|
|
Verfasst am: 26.09.2017, 18:24
Titel:
|
|
Hallo Jan,
den Befehl
habe ich schon modifiziert, da addpath in einer standalone Probleme macht, aber alle Unterordner gehören zu dem Programm dazu:
Von eval bin ich mitlerweile auch weg:
Zitat: |
Was heißt "werden nicht erkannt" genau? Was geschieht denn?
|
Das Problem konnte ich mit dem direkten Pfad lösen, bzw. lag es wohl auch daran, dass ein nicht kompilierter Code in der standalone nicht ausgeführt werden kann.
Jetzt muss ich es nur noch schaffen ohne Matlab .mat-files erstellen lassen zu können, oder einen Weg finden, wie die Standalone das für mich übernimmt
Vielen Dank für die Hilfe und die Tipps!
_________________
Beste Grüße
TomF
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|