Forum: PC-Programmierung Datei mit c++ öffnen die Dateiendung ist nicht bekannt bzw. ändert sich


von pustewind (Gast)


Lesenswert?

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.

von Hans (Gast)


Lesenswert?

pustewind schrieb:
> Gibt es in c++ so etwas in der Art öffne datei "GSM1.*" ?

Hast du dich überhaupt schon mal damit beschäftigt?

von pustewind (Gast)


Lesenswert?

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.

von nicht“Gast„ (Gast)


Lesenswert?

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.

von Mark B. (markbrandis)


Lesenswert?

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
von Jim M. (turboj)


Lesenswert?

man opendir
man readdir

von pustewind (Gast)


Lesenswert?

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

von Ralf D. (doeblitz)


Lesenswert?

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.

von W.S. (Gast)


Lesenswert?

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.

von Irgendwer (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.