Ich habe den folgenden Code in meinem Webdienst:
string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
fileName, FileMode.Create, FileAccess.ReadWrite);
Kann mir jemand helfen, das Problem mit dieser Fehlermeldung aus Zeile 2 des Codes zu beheben.
Das Format des angegebenen Pfads wird nicht unterstützt.
Die Berechtigung für den Ordner ist auf vollen Zugriff für alle festgelegt und ist der tatsächliche Pfad zum Ordner.
Der Haltepunkt gab mir den Wert von str_uploadpath
as C:\\webprojects\\webservices\\UploadBucket\\Raw\\
.
Was ist los mit dieser Saite?
fileName
?fileName
ist leer.Antworten:
Anstatt mit
str_uploadpath + fileName
, versuchen Sie es mitSystem.IO.Path.Combine
statt:Dies gibt eine Zeichenfolge zurück.
quelle
using System.IO;
oben setzen , dann löschenstr_uploadpath + fileName
und schreibenPath.Combine(str_uploadpath, fileName)
str_uploadpath
. Was ist ihr Wert?Ich sehe, dass der Urheber herausgefunden hat, dass der Fehler aufgetreten ist, als er versucht hat, den Dateinamen mit einem ganzen Pfad zu speichern. Eigentlich reicht es aus, ein
":"
im Dateinamen zu haben, um diesen Fehler zu erhalten. Wenn":"
Ihr Dateiname möglicherweise vorhanden ist (z. B. wenn Ihr Dateiname einen Datumsstempel enthält), stellen Sie sicher, dass Sie diese durch etwas anderes ersetzen. Dh:quelle
Path.GetInvalidPathChars
aber nichtPath.GetInvalidFileNameChars
, wie es bei mir der Fall war.Für mich war das Problem ein für das menschliche Auge unsichtbarer
""
Left-To-Right-Embedding- Charakter.Es blieb am Anfang der Zeichenfolge (kurz vor dem 'D') hängen, nachdem ich den Pfad von der Sicherheitsregisterkarte für Windows-Dateieigenschaften kopiert und eingefügt hatte.
Die auf den ersten Blick identischen zwei Zeilen sind also tatsächlich unterschiedlich.
quelle
Wenn Sie versuchen, eine Datei im Dateisystem zu speichern. Path.Combine ist nicht kugelsicher, da es Ihnen nicht hilft, wenn der Dateiname ungültige Zeichen enthält. Hier ist eine Erweiterungsmethode, mit der ungültige Zeichen aus Dateinamen entfernt werden:
Und die Verwendung kann sein:
quelle
return string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Unter anderem, die diesen Fehler verursachen können:
Sie können bestimmte Zeichen nicht in der vollständigen PathFile-Zeichenfolge enthalten.
Diese Zeichen stürzen beispielsweise die StreamWriter-Funktion ab:
Es kann auch andere Sonderzeichen geben, die es zum Absturz bringen. Ich habe festgestellt, dass dies passiert, wenn Sie beispielsweise versuchen, einen DateTime-Stempel in einen Dateinamen einzufügen:
Eine Möglichkeit, dieses Problem zu vermeiden, besteht darin, Problemzeichen in NewFileOutS durch gutartige zu ersetzen:
Hoffe das erspart jemandem ein paar Kopfschmerzen ...!
quelle
Wenn Sie diesen Fehler in PowerShell erhalten, liegt dies höchstwahrscheinlich daran, dass Sie
Resolve-Path
einen Remote-Pfad auflösen, zIn diesem Fall wird
Resolve-Path
ein Objekt zurückgegeben, das bei der Konvertierung in eine Zeichenfolge keinen gültigen Pfad zurückgibt. Es gibt den internen Pfad von PowerShell zurück:Die Lösung besteht darin, die
ProviderPath
Eigenschaft für das zurückgegebene Objekt zu verwendenResolve-Path
:quelle
Versuchen Sie zu ändern:
Server.MapPath("/UploadBucket/Raw/")
zu
Server.MapPath(@"\UploadBucket\Raw\")
quelle
MapPath
sind intelligent genug, um dies so oder so herauszufinden.@
An der Vorderseite der Zeichenfolge befindet sich eine, die diesen entgeht.Dies war mein Problem, das jemand anderem helfen könnte - obwohl es nicht das Problem des OP war:
Ich habe das Problem festgestellt, indem ich meinen Pfad zu einer Protokolldatei ausgegeben und festgestellt habe, dass die Formatierung nicht korrekt ist. Richtig für mich war ganz einfach:
quelle
Hilft die Verwendung der Path.Combine- Methode? Dies ist eine sicherere Möglichkeit, Dateipfade miteinander zu verbinden. Es könnte sein, dass es Probleme gibt, die Pfade miteinander zu verbinden
quelle
Ich verwende den (eingeschränkten) Ausdrucksgenerator für eine Variable zur Verwendung in einer einfachen Dateisystemaufgabe, um ein Archiv einer Datei in SSIS zu erstellen.
Dies ist mein schneller und schmutziger Hack, um die Doppelpunkte zu entfernen und den Fehler zu stoppen: @ [User :: LocalFile] + "-" + REPLACE ((DT_STR, 30, 1252) GETDATE (), ":", "-") + ".xml"
quelle
Ich hatte heute das gleiche Problem. Die Datei, die ich in meinen Code laden wollte, konnte in Excel bearbeitet werden. Nach dem Schließen von Excel begann der Code zu funktionieren!
quelle
Wenn der Wert eine Datei-URL wie file: // C: / Whatever ist, verwenden Sie die Uri-Klasse, um in einen regulären Dateinamen zu übersetzen:
var localPath = (new Uri(urlStylePath)).AbsolutePath
Im Allgemeinen ist die Verwendung der bereitgestellten API eine bewährte Methode.
quelle