J'ai le code suivant dans mon service Web:
string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
fileName, FileMode.Create, FileAccess.ReadWrite);
Quelqu'un peut-il m'aider à résoudre le problème avec ce message d'erreur de la ligne 2 du code.
Le format du chemin donné n'est pas pris en charge.
L'autorisation sur le dossier est définie pour un accès complet à tout le monde et il s'agit du chemin d'accès réel au dossier.
Le point d'arrêt m'a donné la valeur de str_uploadpath
as C:\\webprojects\\webservices\\UploadBucket\\Raw\\
.
Quel est le problème avec cette chaîne?
fileName
?fileName
est vide.Réponses:
Plutôt que d'utiliser
str_uploadpath + fileName
, essayez d'utiliser à laSystem.IO.Path.Combine
place:qui renvoie une chaîne.
la source
using System.IO;
ci-dessus, puis effacezstr_uploadpath + fileName
et écrivezPath.Combine(str_uploadpath, fileName)
str_uploadpath
. Quelle est sa valeur?Je vois que l'expéditeur a découvert que l'erreur s'est produite lors de la tentative de sauvegarde du nom de fichier avec un chemin complet. En fait, il suffit d'avoir un
":"
dans le nom du fichier pour obtenir cette erreur. S'il y en a":"
dans votre nom de fichier (par exemple si vous avez un horodatage dans votre nom de fichier), assurez-vous de les remplacer par autre chose. C'est à dire:la source
Path.GetInvalidPathChars
mais pasPath.GetInvalidFileNameChars
, comme ce fut le cas pour moi.Pour moi, le problème était un personnage invisible de
""
gauche à droite .Il est resté au début de la chaîne (juste avant le 'D'), après avoir copié-collé le chemin, à partir de l'onglet de sécurité des propriétés du fichier Windows.
Donc celles-ci, identiques à première vue, deux lignes sont en fait différentes.
la source
Si vous essayez d'enregistrer un fichier dans le système de fichiers. Path.Combine n'est pas à l'épreuve des balles car il ne vous aidera pas si le nom du fichier contient des caractères non valides. Voici une méthode d'extension qui supprime les caractères non valides des noms de fichiers:
Et l'utilisation peut être:
la source
return string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Entre autres choses qui peuvent provoquer cette erreur:
Vous ne pouvez pas avoir certains caractères dans la chaîne PathFile complète.
Par exemple, ces caractères planteront la fonction StreamWriter:
il peut y avoir d'autres caractères spéciaux qui le plantent aussi. J'ai trouvé que cela se produit lorsque vous essayez, par exemple, de mettre un tampon DateTime dans un nom de fichier:
Une façon d'éviter ce problème est de remplacer les caractères problématiques dans NewFileOutS par des caractères bénins:
J'espère que cela évitera à quelqu'un des maux de tête ...!
la source
Si vous obtenez cette erreur dans PowerShell, c'est probablement parce que vous utilisez
Resolve-Path
pour résoudre un chemin distant, par exempleDans ce cas,
Resolve-Path
renvoie un objet qui, lorsqu'il est converti en chaîne, ne renvoie pas de chemin valide. Il renvoie le chemin interne de PowerShell:La solution est d'utiliser la
ProviderPath
propriété sur l'objet renvoyé parResolve-Path
:la source
Essayez de changer:
Server.MapPath("/UploadBucket/Raw/")
à
Server.MapPath(@"\UploadBucket\Raw\")
la source
MapPath
sont suffisamment intelligentes pour le comprendre de toute façon.@
au début de la chaîne qui les échappe.C'était mon problème, qui peut aider quelqu'un d'autre - même si ce n'était pas le problème du PO:
J'ai déterminé le problème en sortant mon chemin vers un fichier journal et en trouvant qu'il ne se formait pas correctement. La bonne chose pour moi était tout simplement:
la source
Est-ce que l'utilisation de la méthode Path.Combine aide? C'est un moyen plus sûr de joindre des chemins de fichiers. Il se pourrait qu'il ait des problèmes pour rejoindre les chemins ensemble
la source
J'utilise le générateur d'expression (limité) pour une variable à utiliser dans une simple tâche de système de fichiers pour créer une archive d'un fichier dans SSIS.
C'est mon hack rapide et sale pour supprimer les deux points pour arrêter l'erreur: @ [User :: LocalFile] + "-" + REPLACE ((DT_STR, 30, 1252) GETDATE (), ":", "-") + ".xml"
la source
J'ai eu le même problème aujourd'hui. Le fichier que j'essayais de charger dans mon code était ouvert pour modification dans Excel. Après avoir fermé Excel, le code a commencé à fonctionner!
la source
Si la valeur est une URL de fichier comme file: // C: / peu importe, utilisez la classe Uri pour traduire en un nom de fichier normal:
var localPath = (new Uri(urlStylePath)).AbsolutePath
En général, l'utilisation de l'API fournie est une bonne pratique.
la source