Zum Inhalt springen

[VB.net] Serververzeichnís durchsuchen


noobvb.net

Empfohlene Beiträge

Hi Leute,

habe mal wieder eine Frage an euch.

Ich möchte eine Datei von einem Webserver laden. Die Methode, welche mir die Daten downloadet, verlangt zwingend einen Dateinamen. Da die Datei, die ich suche, täglich ihren Namen ändert, kann ich diesen nicht fest angeben.

Nun meine Fragen:

Hat irgend jemand eine Idee, wie man das Verzeichnis eines Webservers nach Dateien durchsuchen kann? Hab schon im Netz danach geschaut und da hab ich nichts gefunden.

Bin für alle Tipps dankbar

Beste Grüße

noobvb.net

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi flashpixx,

vielen Dank für die Info.

Es muss doch aber irgend wie eine Möglichkeit geben, herauszufinden, wie die Daten Dateien heißen, die sich auf dem Server befinden. Ich kenne nur einen Ordner auf dem Server und aus diesem sollte ich eine bestimmte Datei herunterladen. Gibt es hierfür tatsächlich keine Möglichkeit zur Umsetzung?

Gruß

noob

Link zu diesem Kommentar
Auf anderen Seiten teilen

kannst du das nicht über die Http Request klasse machen?

link1

Schau dir da mal die Members der Klassen an. Ich denke das es mit pathinfo schon klappen könnte, das du dir die inhalte eines Pfades auf einem Webserver zurückgeben lassen kannst. Und dann könntest du eben weiterverfahren ....

Alternativ mit der Web Response Klasse.

Mfg

Gateway

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich kenne nur einen Ordner auf dem Server und aus diesem sollte ich eine bestimmte Datei herunterladen. Gibt es hierfür tatsächlich keine Möglichkeit zur Umsetzung?

Diese Datei liegt doch bestimmt nicht nur für dein Programm dort. Wie machen das denn anderen Benutzer und/oder Programme? Raten?
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Gateway_man,

vielen Dank für deine Hilfe.

Leider löst dein Tipp mein Problem nicht. Den Download habe ich nämlich bereits realisiert und verwende dabei httpwebrequest und response und die besitzen keine der Eigenschaften von webrequest. Da das erstellen schon sehr langwierig war, möchte ich jetzt nicht alles komplett umwerfen.

Hast du vielleicht Erfahrung mit der webrequest Klasse und kannst mir ein paar Fragen beantworten?

  • Wie wird der Uri übergeben? Habe keine Methode gefunden, die ein Uri entgegen nimmt, da die meisten ReadOly sind

  • Kann ich WebRequest zusätzlich verwenden?

  • Gilt diese Klasse nicht nur für ASP.net? Es ist mir leider nicht möglich auf ASP.net zurückzugreifen und somit wäre auch die Umsetzung über webrequest nicht möglich

Bin weiterhin für jeden Tip dankbar

Beste Grüße

noob

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Klotzkopp,

diese Datei liegt nur für mein Programm dort.

Bei der Datei handelt es sich um eine Protokolldatei, welche eine Antwort der gegenüberliegenden Seite auf ein Upload von meinem Programm darstellt. Mir ist der Ordern auf dem Server bekannt, jedoch nicht der genau Dateiname, da dieser in seinem Namen das Tagesdatum und die Uhrzeit der Erstellung inklusive Millisekunden enthält.

Der Download verlangt zwingend einen Dateinamen, da ansonsten keine Ressource angesprochen werden kann.

Natürich könnte auch manuell auf den Ordner zugegriffen werden und der Dateiname so ermittelt werden, dies ist aber nicht gewünscht. Das ganze soll zu einer bestimmten Uhrzeit automatisch ausgeführt werden.

Du hast schon recht, andere Programme werden nicht raten, aber wie es zu realisieren ist, will mir einfach nicht einfallen.

Wenn du mir einen Tipp hast, wie ich an die Dateiinfo komme, wäre ich dir sehr dankbar.

Beste Grüße

Noob

Link zu diesem Kommentar
Auf anderen Seiten teilen

diese Datei liegt nur für mein Programm dort.

Bei der Datei handelt es sich um eine Protokolldatei, welche eine Antwort der gegenüberliegenden Seite auf ein Upload von meinem Programm darstellt. Mir ist der Ordern auf dem Server bekannt, jedoch nicht der genau Dateiname, da dieser in seinem Namen das Tagesdatum und die Uhrzeit der Erstellung inklusive Millisekunden enthält.

Der Download verlangt zwingend einen Dateinamen, da ansonsten keine Ressource angesprochen werden kann.

Warum dieses ganze Hin und Her? Das ist für mich vom Konzept völliger Murks. Legt in das Verzeichnis einfach eine Txt oder XML Datei, die immer einen definierten Namen trägt und in dem der Dateiname der zu ladenden Datei liegt Oder vergib einen eindeutigen Namen, z.B. in dem Du die Datei vorher packst. wenn Du sie entpackst hast Du wieder den original Namen

Dieses "ich suche mal nach ner Datei auf nem Webserver", der kein Listview unterstützt, halt ich nicht für eine professionelle Lösung. Als Alternativ Vorschlag wäre ein Webservice viel eleganter, der hat eine definierte Schnittstelle und man hat nichts mit Dateien zu tun

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Phil,

ich wäre auch froh, wenn ich das einfach anders machen könnte, aber das geht leider nicht. Den Dateinamen der Files kann ich nicht beeinflussen, der ist vorgegeben. Wenn ich den Upload mache, nimmt eine Schnittstelle auf dem Server meine Daten entgegen und Speicher ein Protokoll für mich in einem anderen Ordner. Der Dateiname wird von der Schnittstelle erzeugt. Die Daten muss ich holen, da ich nur so überprüfen kann, ob die gesendeten Daten von der Schnittstelle verarbeitet wurden.

Mir sind da ziehmlich stark die Hände gebunden, was das Speichern von Daten außerhalb der erwarteten Dateien auf dem Server angeht. Hier besitze ich keinerlei Rechte.

Gruß

Noob

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hast du vielleicht Erfahrung mit der webrequest Klasse und kannst mir ein paar Fragen beantworten?

Wie wird der Uri übergeben? Habe keine Methode gefunden, die ein Uri entgegen nimmt, da die meisten ReadOly sind

Kann ich WebRequest zusätzlich verwenden?

Nein mit der httpwebrequest klasse leider nicht, sonder nur mit der FTPwebrequestklasse.

Du must mal schaun welche Methode du nehmen musst bin mir da etz grad net sicher und hab auch wenig Zeit. Hier mal ein beispiel:


 Dim request2 As System.Net.HttpWebRequest = Net.HttpWebRequest.Create("Hier deine URL")

                request2.Credentials = New Net.NetworkCredential("user", "pass")

                request2.Method = Net.WebRequestMethods.Http.Post

                ...

                ...

                ...

                Dim response2 As Net.HttpWebResponse = request2.GetResponse()

                Using myReader2 As New IO.StreamReader(response2.GetResponseStream())

                    Do While myReader2.EndOfStream = False

...

...

                    Loop

                End Using

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Leute

@Gateway_man: Vielen Dank für den Code. Hab auch gleich mal versucht es umzusetzen. Hast du den nur auf die Schnelle geschrieben oder hast du den so im Einsatz? Funktioniert bei mir nicht, da der Requeststream leer ist. Liegt wohl daran, dass ja auch kein echter Dateistream geöffnet wird, wenn kein Dateiname in der URI steht, oder?

@Phil: Kann dir leider nicht genau sagen, was die Schnittstelle, da ich das nicht darf. Aber soviel sei verraten. Sie empfängt von mir zwei Dateien und überprüft diese. Das Ergebnis dieser Prüfung wird von dieser Schnittstelle dann in einen fest vorgegebenen Ordner in Form einer XML Datei abgelegt. Diese Protokolldatei muss ich mir abholen und ebenfalls überprüfen. Würde ich das ganze manuell machen, wäre das alles recht simpel. Hätte die Datei immer den selben Namen auch, aber die Datei hat einen Dateinamen, der die Uhrzeit der Erstellung beinhaltet. Was ja recht flexbel ist und was eine feste Codierung unmöglich macht. Hab mir auch schon gedacht, dass ich mein Programm so laufen lasse, dass es sämtliche Zeiten durchläuft und immer wieder die Downloadprozedur startet. Konnte das aber nihct umsetzen und denke auch, dass dieser weg recht kritisch ist.

Vielen Dank nochmal für eure Hilfe. Hoffe, ihr könnt mir noch ein paar Tips geben.

Beste Grüße

Noob

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann dir leider nicht genau sagen, was die Schnittstelle, da ich das nicht darf. Aber soviel sei verraten. Sie empfängt von mir zwei Dateien und überprüft diese. Das Ergebnis dieser Prüfung wird von dieser Schnittstelle dann in einen fest vorgegebenen Ordner in Form einer XML Datei abgelegt.

Das beantwortet nicht meine Fragen. Welches Protokoll verwendest Du? HTTP(S), (S)FTP, HTTP(S) mit WebDav etc. Du redest von Dateien, hast aber noch nicht mal eine URL (Uniform Resource Locator ? Wikipedia). Vor allem der Begriff uniform, ich will es mal mit "eindeutig" übersetzen, sollte Dir zu denken geben. Das Argument "ich darf nicht", ist überhaupt nicht diskutabel, Du sollst mit dieser "Schnittstelle" arbeiten, d.h. Dir muss logischer klar sein, wie Daten von der Schnittstelle zu Dir und wieder zurück übertragen werden. Zusätzlich muss Dir die Struktur der übertragenen Daten bekannt sein.

Setz Dich mit den entsprechenden Leuten zusammen und diskutiere das Problem, denn so wie Du versuchst die Lösung anzugehen, ist es aus dem B2B Bereich gesehen, irgendetwas zusammengebautes, was strukturell meiner Erachtens schlecht ist

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Phil,

also, ich sende und empfange die Daten über Https. Was die Schnittstelle genau tut, weiß ich auch. Die Kommunikation zwischen meinem Programm und der Schnittstelle ist nicht direkt, sondern ich übersende der Schnittstelle Daten in einen zuvor endeutig vorgegebenen Ordner. Nach dem erhalt der Daten beginnt die Schnittstelle auf ihrer Seite mit dem Überprüfen meiner gesendeten Daten. Nachdem sie damit fetig ist, legt sie mir in einem ebenfalls eindeutig definierten Ordner auf dem Server eine Datei ab (Server ist nicht meiner, sondern der der zur Schnittstelle gehört). Die Daten, die die Schnittstelle mir in den Ordern gepackt hat, mächte ich abholen. Das ist genau eine XMl Datei und ein ziparchiv. Diese beiden bekommen bei Ihrer Erzeugung einen eindeutigen Dateinamen, der das Tagesdatum und die Uhrzeit inklusive Millisekunden beinhaltet. Das Problem ist, dass ich jetzt praktisch blind nach den Daten suchen muss. Dass der Prozess vielleicht nicht so toll ist, da es besser wäre, wenn die Daten von der gegenseite einfach zu mir übertragen würden, ist mir auch klar. aber hier kann ich mich nicht mit irgend jemand zusammensetzen. Die vorgaben sehen so aus und werden nicht geändert. wäre es mir möglich den prozess zu beeinflussen, hätte ich dieses problem nicht.

Gruß

noob

Link zu diesem Kommentar
Auf anderen Seiten teilen

also, ich sende und empfange die Daten über Https.

Und wie? POST oder GET Request oder liegt evtl dahinter noch ein WebDAV?

WebDAV ? Wikipedia

Hypertext Transfer Protocol ? Wikipedia

Was die Schnittstelle genau tut, weiß ich auch. Die Kommunikation zwischen meinem Programm und der Schnittstelle ist nicht direkt,

Du initierst die Kommunikation und schiebt Deine Daten hoch. Damit ist für die Kommunikation abgeschlossen, denn HTTP ist zustandslos (Zustandslosigkeit ? Wikipedia)

HTTP ist ein zustandsloses Protokoll. Ein zuverlässiges Mitführen von Sitzungsdaten kann erst auf der Anwendungsschicht durch eine Sitzung über eine Session-ID implementiert werden.

Woher weißt Du dann überhaupt, dass die Daten für Dich bereit liegen? D.h. in Deinem Fall musst Du wieder bei der Schnittstelle nachfragen, ob die Daten bereit liegen und da muss sie Dir dann mind den Namen der Datei mitteilen, da Du daraus eine URL zum download erstellen musst

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Und wie? POST oder GET Request oder liegt evtl dahinter noch ein WebDAV?

WebDAV ? Wikipedia

Hypertext Transfer Protocol ? Wikipedia

Den Upload habe mache ich mit PUT realisiert ist dies mittels httpwebrequest/response

Du initierst die Kommunikation und schiebt Deine Daten hoch. Damit ist für die Kommunikation abgeschlossen, denn HTTP ist zustandslos (Zustandslosigkeit ? Wikipedia)

Genau, die Kommunikation geht ausschließlich von mir aus. Upload und Download sind so realisiert, dass sie über einen Timer zu einer bestimmten Zeit ausgeführt werden

Woher weißt Du dann überhaupt, dass die Daten für Dich bereit liegen? D.h. in Deinem Fall musst Du wieder bei der Schnittstelle nachfragen, ob die Daten bereit liegen und da muss sie Dir dann mind den Namen der Datei mitteilen, da Du daraus eine URL zum download erstellen musst

Weiß ich nicht. Da ich unterschiediche Timer habe zum ausführen von Up und Download muss hier eben ein Erfahrungswert angenommen werden, der die Verarbeitungszeit der Schnittstelle berücksichtigt.

Die Schnittstelle kommuniziert überhaupt nicht mit mir. Das keine bidirektionale Kommunikation. Die Kommunikation ist immer einseitig. Ich sehe so zu sagen nur den Empfangs und den Quitungsordner.

noob

Link zu diesem Kommentar
Auf anderen Seiten teilen

Upload und Download sind so realisiert, dass sie über einen Timer zu einer bestimmten Zeit ausgeführt werden [...]

Da ich unterschiediche Timer habe zum ausführen von Up und Download muss hier eben ein Erfahrungswert angenommen werden, der die Verarbeitungszeit der Schnittstelle berücksichtigt.

Oh mein Gott. Dir ist schon klar, dass ein Timer oder auch die Uhrzeit niemals exakt sind und von unterschiedlichsten Faktoren abhängig sind. Zusätzlich ist dieser "Erfahrungswert" auch von diversen Faktoren abhängig, z.B. wie ausgelastet der Server ist.

Mein Ratschlag: Wirf das Projekt weg, das ist fachlich wirklich Horror, wenn ich das lese und konzipiere eine richtige Kommunikation: Mein Tipp Webservice + Datenbank. Ich liefere die Daten an den Server und erhalte eine ID für die Daten. Sie werden dann intern verarbeitet und in einer Datenbank die Ergebnisse gespeichert. Wenn man dann über einen anderen Webservice abfragt, ob die Daten anhand der ID abfragt, bekommt entweder den Status "noch nicht fertig" oder eben die Daten geliefert

In der Informatik wird nicht mit Erfahrungswerten gearbeitet, sondern mit definierten Zuständen. Ich kann wirklich beim aller besten Willen nicht verstehen, wie man überhaupt auf so einen Gedanken kommt, so eine Schnittstelle zu konzipieren bzw diese dann auch absegnen zu lassen

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi

Habe ich mich irgendwie unklar ausgedrückt? Ich möcht nicht meine gesendeten Daten wiederholen und die gegenüberliegende Seite sendet mir keinerlei Informationen.

Timer habe ich deshalb verwendet, weil eine exakte Zeit nicht notwendig ist. Denn die Zeit könnte ich so oder so nicht exakt bestimmen, da ich mal mehr mal weniger große Daten versende, die natürlich auf der gegenüberliegenden Seite auch eine unterschiedlich lange Verarbeitungsdauer haben. Daher muss eben eine gewisse Zeit zwischne Up und Download berücksichtigt werden. Deshalb ja auch die 5 Min Unterschied. Soll ja auch von einem Menschen eingestellt werden. Wäre wohl ein etwas komischen Programm ohne GUI das zu einer ihm beliebigen Zeit irgend welche events auslöst.

Ich wollte eigentlich nur eine Info bekommen, wie man einen Ordner auf einem Server nach einem Dateinamen durchsucht und keine Ratschläge, wie man besser programmiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich wollte eigentlich nur eine Info bekommen, wie man einen Ordner auf einem Server nach einem Dateinamen durchsucht und keine Ratschläge, wie man besser programmiert.

Du hättest Dich einmal über den Begriff bei Google "directory listing" informieren können. Das ist, wie Du es ja sicherlich besser weißt, ein Mechanismus des Webservers. Wenn dieser deaktiviert ist, was in der Standardinstallation von Apache so ist, dann kannst Du nicht durchsuchen, weil Du eben eine entsprechend "Forbidden" bzw "Permission denied" Meldung bekommst.

Wenn das Direcoty Listing deaktiviert ist, dann wirst Du ohne die Kenntnisse der URL die Daten nicht "suchen" können, außer Du versuchst alle Möglichkeiten, was aber dazu führt, dass dem Admin das Error-Log überläuft.

Aber Du möchtest Dir ja auch keine Gedanken über ein entsprechendes Konzept machen, mit dem man das Problem entsprechend lösen kann.

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

So da du ja gesagt hast du kannst die namen nicht ändern (was auch verständlich ist bei einer festen namenskonvention) und ich beim überfliegen was von Apache mitbekommen habe, wäre doch folgende Idee ganz reizvoll (natürlich nur, wenn du oder deine Firma Zugriff auf den Server habt):

Man gehe auf den Server, startet den apache, startet den integrierten FTP server und legt einen Benutzer an welcher Zugriff auf das Verzeichnis hat welche die Dateien beinhaltet. Warum ich das so lösen würde? Da das .NET eine schöne Methode bereithällt, die sich


Net.WebRequestMethods.Ftp.ListDirectory

nennt.

Ich mache dies so, um meine Logfiles vom Server zu holen und zu verarbeiten. Funktioniert einwandfrei.

Mfg

Simon

Bearbeitet von Gateway_man
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Leute,

vielen Dank für eure Hilfe.

@Gateway_man habe mir auch schon gedacht, über einen FTP Zugriff auf den Server zuzugreifen. Denke aber, dass das nicht möglich sein wird, denn ich darf weder am Server noch an der gegenüberliegenden Schnittstelle Veränderungen an den Einstellungen vornehmen.

Wie seht ihr das? Ist eine derartige Aufgabe ohne Anpassungen an der gegenüberliegenden Seite überhaupt umsetzbar?

Beste Grüße

noobvb

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi Leute,

was ich noch sagen wollte.

@Gateway_man: Alle Vorschläge, die wir machen, setzen entweder voraus, dass der OP die Konfig des Servers verändern oder die Schnittstelle verändern darf. Der OP möchte eine Lösung, wo er an dem bestehenden System nichts ändert

Ich bin natürlich bereit an meiner Schnittstelle Veränderungen vorzunehmen,

hier wäre ich auch über mögliche Codebeispiele sehr dankbar.

Was die gegenüberliegende Seite betrifft. Hier kann ich nichts dran ändern und muss alles leider als gegeben hinnehmen.

Gruß

noobvb

Link zu diesem Kommentar
Auf anderen Seiten teilen

Was die gegenüberliegende Seite betrifft. Hier kann ich nichts dran ändern und muss alles leider als gegeben hinnehmen.

Du scheinst nicht verstehen zu wollen, dass das Problem nicht primär bei Dir liegt. Das Problem ist nicht Deine "Schnittstelle" bzw. die Konfiguration des Servers. Du hast nur, damit Dein Code entsprechend lauffähig wird, diese Möglichkeiten:

  • Den Server so zu konfigurieren, dass er Dir einen Directory Index liefert, mit dem Du arbeiten kannst. Womit weiterhin das Problem besteht, dass Du diesen Krampf mit Timern machen musst, der letztendlich auch zu Fehlern führt
  • Oder Du konzipierst alles neu, d.h. die entsprechende Schnittstelle am Server, sowie Deinen Code. Ein Webservice wäre wohl die sinnvollste Alternative. Es muss ja nur dafür Sorge getragen werden, dass der Datenaustausch korrekt abgewickelt wird, alles andere kann ja so erhalten bleiben

Phil

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...