Laden...

FileCopy ohne Dateierweiterung

Erstellt von RaVeN1703 vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.866 Views
Thema geschlossen
R
RaVeN1703 Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren
FileCopy ohne Dateierweiterung

Hallo zusammen,

folgendes Anliegen:

Ich habe um die 200.000 Dateien, die in verschiedenen Ordnern liegen. Diese muss ich alle sammeln und in einem Ordner ablegen. Die Pfade zu diesen Dateien habe ich aus einer Datenbank ausgelesen und liegen als Textdatei vor.

Nun lade ich diese Textdatei und will mit dem File.Copy beginnen, die Daten von A nach B zu schieben.

Problem ist, diese Dateien haben keine Erweiterung. Der File.Copy kann aber ohne der Erweiterung nichts anfangen ebenso der FileInfo.CopyTo.
Als Fehler wird mir dann "Die Datei "xxxxx" konnte nicht gefunden werden." angezeigt.

Gibt es eine Möglichkeit Dateien zu kopieren ohne eine Dateierweiterung zu haben?

MfG

16.842 Beiträge seit 2008
vor 10 Jahren

Vermutlich verwendest Du File.Copy falsch; jedenfalls hat File.Copy kein Problem mit Dateien ohne Endung.
Beachte, dass es weder File noch Folder im Zielverzeichnis gibt, die genauso heissen.
Und File Copy will auch den vollständigen Pfad inkl. Dateiname.

File.Copy( @"C:\temp\testfile", @"C:\temp\codetest\testfile" );
R
RaVeN1703 Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren

Hallo Abt,

ich kann mir wirklich nicht vorstellen das ich File.Copy falsch verwende.
Ich habe es gerade eben genauso wie du beschrieben hast getestet. Weder Ordner noch Dateien existieren die so heißen.

Dann hab ich mal Testweise ein ".txt" hinter den ersten Parameter gesetzt und dann ging es?

Hast du es eben bei dir getestet?

49.485 Beiträge seit 2005
vor 10 Jahren

Hallo RaVeN1703,

File.Copy verlangt meines Wissens den exakten Dateinamen inkl. Erweiterung. Platzhalter werden von File.Copy meines Wissens nicht unterstützt.

Wenn die Angaben in der Datenbank unvollständig (also ohne Erweiterung) sind, dann musst die die Erweiterung vor dem Kopieren ermitteln.

Dazu könntest du mit Directory.GetFiles ermitteln, welche Dateien in dem Quellverzeichnis vorhanden sind (die bis auf die Erweiterung mit der Angabe aus der Datenbank übereinstimmen).

Verwende die Methoden der Path-Klasse, um Pfad- und Dateinamen zu zerlegen bzw. zusammenzusetzen.

Die Benutzung der Methoden aus System.IO setzen wir als bekannt voraus. Schau in [Hinweis] Wie poste ich richtig? Punkt 1.1.1.

herbivore

R
RaVeN1703 Themenstarter:in
3 Beiträge seit 2014
vor 10 Jahren

Hallo herbivore,

Danke für deine Antwort.
Mit der annahme, dass die Angaben in der Datenbank unvollständig sind, hast du recht. Ich kann mir nur den vollständigen + den Dateinamen zusammenbauen lassen. Die erweiterung ist nicht enthalten.

Was ich vergessen habe zu erwähnen ist, dass die Dateien auch in den Ordnern als "Datei" hinterlegt sind. Sprich diese Dateien können nur durch unsere Software geöffnet werden, die wir in unserer Firma haben.

Leider kann ich auch nicht den ganzen Ordner kopieren, weil es vorkommen kann, dass dort eine Datei enthalten ist die ich nicht brauche.

Ist schon ein bisschen merkwürdig, dass obwohl ich die Pfade + die Dateinamen die ich brauche, habe, aber trotzdem mit diesen Infos nichts anfangen kann. Ich verzweifel... 🤔

16.842 Beiträge seit 2008
vor 10 Jahren

Nein, File.Copy braucht KEINE Dateierweiterung. Und vor allem wird Dir File.Copy eine ArgumentException um die Ohren werfen, wenn Du * verwendest (Illegal characters). Das KANN nicht funktionieren.
Wenn es plötzlich mit ".txt" ging, dann hast Du keine Datei ohne Dateierweiterung, sondern ganz einfach eine Textdatei! Ansonsten würdest Du eine FileNotFoundException erhalten. Irgendwas stimmt also an Deinen Daten oder an Deinen Angaben, die Du hier schreibst, nicht.

Das Beispiel von oben ist so getestet und funktioniert - 100%tig. Zudem verwende ich selbst Dateinamen ohne Dateierweiterung und habe damit noch nie Probleme gehabt.

Der Pfad wird 1:1 an die Windows API übermittelt.
Ich habe auch an diesen Fall gedacht und alle meine Tests bzgl. FastIO haben sich so erwiesen, dass die API 100% korrekt arbeitet. Es funktioniert!

Hinweis von herbivore vor 10 Jahren

Um den Widerspruch der beiden Aussagen "File.Copy verlangt meines Wissens den exakten Dateinamen inkl. Erweiterung" und "Nein, File.Copy braucht KEINE Dateierweiterung" aufzulösen: Es muss immer der volle Dateiname angegeben werden, also der eigentliche Dateiname plus Erweiterung, falls die Datei eine Erweiterung hat. Hat die Datei keine Erweiterung, muss man natürlich auch bei File.Copy keine Erweiterung annehmen. Hat die Datei eine Erweiterung, muss man diese bei File.Copy auch angeben.

3.825 Beiträge seit 2006
vor 10 Jahren

Problem ist, diese Dateien haben keine Erweiterung.

Bist Du Dir da ganz sicher ?

Lässt Du Dir die Dateierweiterungen anzeigen ?

Im Explorer unter "Ansicht" den Haken bei "Dateinamenerweiterungen" rausnehmen.

Kannst Du die Dateien mit dem Explorer kopieren ?

In der Dos-Box mit Angabe des exakten Pfades ?

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3

U
1.688 Beiträge seit 2007
vor 10 Jahren

Dann hab ich mal Testweise ein ".txt" hinter den ersten Parameter gesetzt und dann ging es?

Nun ja, dann ist es ja offensichtlich, dass der Name der Datei ein ".txt" enthält. Warum sollte es dann ohne diese Angabe kopiert werden können?

Du bist nicht zufällig deshalb zu Deiner irrigen Annahme gelangt, weil der Windows-Explorer standardmäßig(*) keine Erweiterungen anzeigt?

(*) Wie man so arbeiten kann und warum das Standard ist, wird sich mir wohl nie erschließen...

T
708 Beiträge seit 2008
vor 10 Jahren

Also oben hat RaVeN1703 doch beschrieben, dass die Dateien in der Datenbank ohne Erweiterung vorliegen. Auf dem Dateisystem natürlich schon (spezielle Endung der Software).

Demnach gibt es zwei Möglichkeiten:*Die von herbivore genannte, anhand des Pfades und des Dateinamen die Endung zu ermitteln *Handelt es sich bei allen Dateien alle um die gleichen Endungen aus Eurer Software, diese "hart" anfügen.

Nach beiden Fällen gilt es dann diese Endung im Quellpfad, als auch im Zielpfad anzuhängen.

Hinweis von herbivore vor 10 Jahren

Damit ist jetzt wohl (inhaltlich) alles gesagt. Auch dass das Thema unter [Hinweis] Wie poste ich richtig? Punkt 1.1.1 fällt, wurde schon erwähnt.

Thema geschlossen