Laden...

syntaxfrage zu System.IO.File.Move(quelle ziel)

Erstellt von silizia vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.442 Views
S
silizia Themenstarter:in
6 Beiträge seit 2007
vor 17 Jahren
syntaxfrage zu System.IO.File.Move(quelle ziel)

eine frage, zu der ich keine hilfe finde.
kann man bei File.Move den zielpfad auch mit einem zusammengesetzten string angeben?

es geht um folgendes:

ich will temp-dateien bearbeiten und unter einem anderen pfad speichern.
es klappt fast.
nur die methode Move gibt mir zu schaffen:


// hier alles ok, könnt ihr ignorieren

string filename = System.IO.Path.GetTempFileName();
this.Request.Files[0].SaveAs(filename);
string newfilename = System.IO.Path.ChangeExtension(filename, ".3gp");


// das hier wirft eine exception (unsupported path format oder so etwas):

System.IO.File.Move(filename, @"c:\inetpub\wwwroot\webvideos\video\" +newfilename);

hätte ich hier die letzte zeite so geschrieben:
System.IO.File.Move (filename, @"c:\inetpub\wwwroot\webvideos\video\ziel.3gp");
dann hätte es funktioniert.
nur dass der name der datei ja nicht fest ist, d.h. ich muss ja die variable "newfilename" im pfad verwenden.

aber wie!!??

2.223 Beiträge seit 2005
vor 17 Jahren

Hallo silizia,

  1. Bitte benutzte die CSharp Tags für deinen CSharp code

  2. was steht in der 'newfilename' wenn du dir das ganze im debugger anschaust?

mfg

S
silizia Themenstarter:in
6 Beiträge seit 2007
vor 17 Jahren

1- ok, das wußte ich nicht, mit den c-sharp tags, mache ich dann (aber das wohl nur wenn der code länger ist, also für eine einzige zeile muss es wahrscheinlich nicht sein oder?).

2- ja, ich kann das jetzt gerade nicht anschauen (ist auf einem anderen rechner) aber es schleicht sich tatsächlich die vermutung ein, dass in 'newfilename' nicht nur einen dateiname drinnen steht sondern den ganzen pfad... 🤔

das würde es erklären.. dann würde den string ziel so aussehen

c:\inetpub\wwwroot\webvideos\video\c:..\temp\zieldatei.3gp

was natürlich nicht korrekt wäre.

ok, ich schaue da mal.
wichtig war jetzt für mich zu wissen, dass die schreibweise

System.IO.File.Move(filename, @"c:\inetpub\wwwroot\webvideos\video" +newfilename);

an sich korrekt ist also auch einen string ergibt mit dem wert von 'newfilename'.

danke erstmal!

silizia

B
1.529 Beiträge seit 2006
vor 17 Jahren

Wenn man schon nicht die Doku benutzt, sollte man sich wenigstens mit dem Debugger anfreunden.

Ich zitiere mal eine Passagen aus der MSDN Lib:

Path.GetTempFileName
Creates a uniquely named, zero-byte temporary file on disk and returns the full path of that file.

Problem erkannt?

Falls nicht:
Path.GetTempFileName() liefert dir einen vollständigen Pfad, beispielsweise "C:\Temp\tmp00056.tmp". Unter diesem speicherst du das Video.
Dann änderst du die Extension => "C:\Temp\tmp00056.3gp".
Anschließend bastelst du dir den Pfad "c:\inetpub\wwwroot\webvideos\video\C:\Temp\tmp00056.3gp".
Dass da eine Exception kommt, ist ja wohl klar.

Alles was fehlt, ist ein simples Path.GetFileName() um dein Path.ChangeExtension().

Wobei ich mich generell frage, wieso du eine temporäre Datei erzeugst, nur um diese dann woanders hin zu verschieben und umzubenennen. Wäre es nicht einfacher, die Datei gleich mit an Ort und Stelle zu speichern?
Falls dir kein sinnvolles Benennungsschema einfällt (nahezu jedes sollte aber besser als Path.GetTempFileName sein), hilft dir wahrscheinlich Path.GetRandomFileName().

S
silizia Themenstarter:in
6 Beiträge seit 2007
vor 17 Jahren

hallo,

😁 ist ja gut.. ich war anfangs auf der falschen fährte, deswegen überhaupt meine frage: habe mit stringmanipulation nicht viel gemacht und ich dachte, ich hätte etwas einfach falsch geschrieben..

wie in meinem letzten beitrag zu lesen: so langsam hatte ich es kapiert mit dem pfad 😉 aber vielen dank für den endgültigen beweis.

ok, also ich mache es entweder so wie du sagst, oder sonst hatte ich gedacht, ich bearbeite 'newfilename' so, dass ich den string abschneide (ab dem letzten '/' oder so). deine lösung ist natürlich noch kürzer.

zu deiner generellen frage: die videos kommen rein durch ein kompliziertes verfahren (es sind aufnahmen, die vom handy aus gemacht werden. das ganze befindet sich im rahmen eines vxml-menus) und die werden nun mal so gespeichert. ist eine spezielle geschichte. deshalb.

aber es dürfte alles wunderbar klappen, wenn ich in 'newfilename' nun endlich das richtige drinnen habe.

also vielen dank an euch beiden. vor allem weil die frage anscheinend so unwürdig war 😉))
aber naja, mir hat es geholfen, dass ich sie gestellt habe und eure antworte bekommen habe..

grüße!
silizia