“Le chemin du format n'est pas pris en charge.”
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 à partir de la ligne 2 du code.
Le chemin du format n'est pas pris en charge.
Autorisation sur le dossier est configuré pour un accès complet à tout le monde et il est le chemin d'accès au dossier.
Le point d'arrêt m'a donné la valeur de str_uploadpath
comme C:\\webprojects\\webservices\\UploadBucket\\Raw\\
.
Quel est le problème avec cette chaîne?
- Quelle est la valeur de
fileName
? - Sonne comme
fileName
est vide. - Justin, vous aviez raison. La valeur de nom de fichier a C:/ dans le nom. C'est ce qui a été de me tuer. Merci.
Vous devez vous connecter pour publier un commentaire.
Plutôt que d'utiliser
str_uploadpath + fileName
, essayez d'utiliserSystem.IO.Chemin d'accès.Combiner
à la place:qui retourne une chaîne de caractères.
using System.IO;
ci-dessus, puis désactivezstr_uploadpath + fileName
et écrirePath.Combine(str_uploadpath, fileName)
str_uploadpath
. Quelle est sa valeur?File.ReadAllBytes("C:\Users\Admin\AppData\Local\Adobe\Flash CS6\en_US\Configuration\CodeModel\cm-cache\SwcCache\basemovie3.swc1272273593\library.swf");
? Ce qui est faux. La correcte est d'utiliser un @ avant la chaîne de caractères à ignorer special caractère'/'
.File.ReadAllBytes(@"C:\Users\Admin\AppData\Local\Adobe\Flash CS6\en_US\Configuration\CodeModel\cm-cache\SwcCache\basemovie3.swc1272273593\library.swf");
File.ReadAllBytes( e.FullPath );
où e est une instance de FileSystemEventArgs. Je ne pouvais pas faire une telle banale erreur de toute façon, parce que ce ne serait même pas compiler en raison de la non valide les séquences d'échappement. La chaîne du contenu est exactement comme cité (pas y compris les guillemets).Je vois que l'auteur a trouvé que l'erreur s'est produite lors de la tentative d'enregistrer le nom de fichier avec un chemin d'accès complet. En fait il suffit d'avoir un
":"
dans le nom de fichier pour obtenir cette erreur. Si il pourrait y avoir":"
dans le nom de votre fichier (par exemple, si vous avez un timbre à date dans le nom de votre fichier) assurez-vous de les remplacer par quelque chose d'autre. I. e:Path.GetInvalidPathChars
mais pasPath.GetInvalidFileNameChars
, comme ce fut le cas pour moi.Si vous essayez d'enregistrer un fichier sur le système de fichiers. Chemin d'accès.Combiner n'est pas de preuve de balle comme elle ne vous aidera pas si le nom de fichier contient des caractères non valides. Ici est une extension de la méthode qui supprime des caractères non valides dans les noms de fichiers:
Et l'utilisation peuvent être:
return string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Pour moi le problème était invisible à l'œil humain
""
De Gauche À Droite Intégration caractère.Il coincé au début de la chaîne (juste avant le "D"), après je copie-collé le chemin, à partir du windows fichier de propriétés de l'onglet sécurité.
De sorte que ceux, identiques à première vue, les deux lignes sont en fait différents.
Parmi d'autres choses qui peuvent provoquer cette erreur:
Vous ne pouvez pas avoir certains caractères dans le plein PathFile chaîne.
Par exemple, ces personnages vont planter le StreamWriter fonction:
il y a peut être d'autres caractères spéciaux que crash aussi.
J'ai trouvé ce qui se passe quand vous essayez, par exemple, de mettre un DateTime timbre dans un nom de fichier:
Une façon d'éviter ce problème est de remplacer problème de caractères dans NewFileOutS avec ceux qui sont bénignes:
Espère que cela sauve quelqu'un, quelques maux de tête...!
Essayez de changer:
Server.MapPath("/UploadBucket/Raw/")
à
Server.MapPath(@"\UploadBucket\Raw\")
MapPath
est assez intelligent pour le comprendre de toute façon.@
à l'avant de la chaîne qui échappe à ceux-ci.Si vous obtenez cette erreur dans PowerShell, il est plus probable parce que vous êtes à l'aide de
Resolve-Path
pour résoudre un chemin d'accès à distance, par exempleDans ce cas,
Resolve-Path
retourne un objet qui, lorsqu'elle est convertie en une chaîne de caractères, ne retourne pas un chemin d'accès valide. Il retourne PowerShell du chemin interne:La solution est d'utiliser la
ProviderPath
de propriété sur l'objet renvoyé parResolve-Path
:C'était mon problème, ce qui peut aider quelqu'un d'autre -- bien que ce n'était pas le cas des OP question:
Je résolus le problème en éditant mon chemin d'accès à un fichier journal, et le trouvant pas la mise en forme correctement. Correct pour moi, c'est tout simplement:
Fait à l'aide de la Chemin d'accès.Combiner méthode de l'aide? C'est un moyen plus sûr pour rejoindre les chemins de fichiers ensemble. Il se pourrait qu'il rencontre des problèmes de rejoindre les chemins
Je suis en utilisant le (limitée) générateur d'Expression pour une Variable pour l'utiliser dans un simple Système de Fichiers d'une archive d'un fichier dans SSIS.
C'est ma rapide et sale hack pour supprimer les virgules pour arrêter le message d'erreur:
@[Utilisateur::LocalFile] + "-" + REMPLACER((DT_STR, 30, 1252) GETDATE(), ":", "-") + ".xml"
Si la valeur est un fichier url de type file://C:/que ce soit, l'utilisation de la classe Uri de traduire un nom de fichier régulier:
var localPath = (new Uri(urlStylePath)).AbsolutePath
En général, l'aide de l'API est la meilleure pratique.