Hallo zusammen, ich möchte mit c++ eine datei auslesen, die per SMS ankommt. Das Problem dabei ist, dass die Dateiendung immer anders ist Bsp. 1. SMS kommt und liegt im Verzeichnis "/var/spool/sms/incoming/" als GSM1.XyZ123 Diese Datei GSM1.XyZ123 würde ich gern mittels c++ auslesen, weiterverarbeiten und anschliesend in einen andern Ordner verschieben. Jetzt kommt die nächste SMS diese heist dann z.Bsp. GSM1.ghdl45 Der erste Teil vom Dateinamen ist immer gleich (GSM1). Hat jemand einen Lösungsansatz ? Gibt es in c++ so etwas in der Art öffne datei "GSM1.*" ? Für Hilfe wäre ich sehr dankbar.
pustewind schrieb: > Gibt es in c++ so etwas in der Art öffne datei "GSM1.*" ? Hast du dich überhaupt schon mal damit beschäftigt?
Hallo Hans, ja stehe zwar noch am Anfang, aber öffnen und auslesen/schreiben von bekannten Dateinamen (.txt) sind kein Problem. Mein Problem sind die unbekannten Dateiendungen.
oh je, welch ein Tal. C++ ist es erst mal egal, wie eine Datei heißt. Was drinsteht ist wichtig. Die Dateiendungen sind erst mal nur für Windows interessant, weil s daran fest macht, welches Programm die Datei öffnen soll. Wenn du jetzt also eine Datei mit dem Namen Hallo.bjhg hat und drinnen nur ein “Hallo Welt“ steht, ist das immer noch nur eine Text Datei.
pustewind schrieb: > Der erste Teil vom Dateinamen ist immer gleich (GSM1). Hat jemand einen > Lösungsansatz ? > Gibt es in c++ so etwas in der Art öffne datei "GSM1.*" ? Mit der verwendeten Programmiersprache hat das Ganze erstmal nichts zu tun. Du brauchst dazu eine Funktion des Betriebssystems. Bei Windows gibt es zum Beispiel FindFirstFile: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx Unter Linux sollte es wohl etwas Ähnliches geben.
:
Bearbeitet durch User
Hallo zusammen, vielen Dank für die vielen Antworten. Vielleicht habe ich mich nicht richtig ausgedrück. Ich versuche es mal anders: ich habe mir ein c++ Programm geschrieben, welches verschiedene GPIO's am Raspberry überwacht. Liegt ein High Signal an, rufe ich meine Funktion auf, die eine SMS-Nachricht (Textfile) erstellt und im Order outgoing speichert - soweit so gut. Das funktioniert bis dahin auch alles perfekt. Jetzt möchte ich den Ordner incoming überwachen und wenn eine SMS rein kommt deren Inhalt auslesen und eine entsprechende Aktion auslösen bzw. unterlassen (je nach Inhalt der SMS). Im Shellscript erledige ich das so:
1 | ... |
2 | LS=$(/bin/ls /var/spool/sms/incoming/ | grep 'GSM1' | wc -1) |
3 | if (( $LS > 0 )) then |
4 | |
5 | egrep -rni -e 'suchwort' /var/spool/sms/incoming/ -q |
6 | if [ $? = 0 ]; then |
7 | ... mach was |
8 | fi |
9 | |
10 | egrep -rni -e 'suchwort2' /var/spool/sms/incoming/ -q |
11 | if [ $? = 0 ]; then |
12 | ... mach was anderes |
13 | fi |
14 | ... |
Gibt es da keinen Lösungsansatz in c++ ? Ich hoffe, dass ich mich etwas verständlicher ausgedrückt habe. Vielen Dank
Wenn du Listen von Files, die zu einem Namen mit wildcards passen, haben willst, dann ist der passende Suchbegriff "Globbing" (-> man 3 glob). Wenn du eigentlich eher wissen willst, welche Dateien sich in einem Verzeichnis geändert haben bzw. angelegt wurden, dann gibt es in Linux dafür den inotify-Mechanismus. Eine Einführung bekommst du in inotify(7). Wenn das alles für dich noch Neuland ist (und die dir schon gegebenen Hinweise auf opendir/readdir nichts sagen), dann solltest du am besten mal in das Standardwerk "Advanced Programming in the UNIX Environment" von Stevens reinsehen. Damit kannst du sehr gut lernen, wie du die ganzen Funktionen des Betriebssystems von deiner Anwendung aus ansprechen kannst.
pustewind schrieb: > Ich hoffe, dass ich mich etwas verständlicher ausgedrückt habe. Dein eigentliches Problem war bereits im Eroffnungspost überdeutlich sichtbar. Ich bin mir absolut sicher, daß es auch bei Linux adäquate Systemfunktionen gibt für sowas, das bei Windows FindOpen, FindFirst, FindNext und FindClose heißt. Dann brauchst du bloß durch diesen Zirkus zu tingeln, das Erstellungsdatum der Dateien zu ermitteln und dann zu schauen, welche davon jünger sind als dein Stichdatum. Und wie schon gesagt: die konkrete Programmiersprache ist da erstmal egal. Also lerne erstmal, mit Betriebssystem-Funktionen umzugehen. W.S.
W.S. schrieb: > Systemfunktionen gibt für sowas, das bei Windows FindOpen, FindFirst, > FindNext und FindClose heißt. z.B.: scandir http://manpages.courier-mta.org/htmlman3/scandir.3.html
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.