Tengo el siguiente código en mi servicio web:
string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
fileName, FileMode.Create, FileAccess.ReadWrite);
¿Alguien puede ayudarme a resolver el problema con este mensaje de error de la línea 2 del código?
El formato de la ruta dada no es compatible.
El permiso en la carpeta está configurado para acceso completo para todos y es la ruta real a la carpeta.
El punto de interrupción me dio el valor de str_uploadpath
as C:\\webprojects\\webservices\\UploadBucket\\Raw\\
.
¿Qué le pasa a esta cadena?
fileName
?fileName
vacío.Respuestas:
En lugar de usar
str_uploadpath + fileName
, intente usar en suSystem.IO.Path.Combine
lugar:que devuelve una cadena.
fuente
using System.IO;
arriba, luego borrarstr_uploadpath + fileName
y escribirPath.Combine(str_uploadpath, fileName)
str_uploadpath
. Cual es su valor?Veo que el creador descubrió que el error ocurrió al intentar guardar el nombre del archivo con una ruta completa. En realidad, es suficiente tener un
":"
nombre de archivo para obtener este error. Si puede haber":"
en el nombre de su archivo (por ejemplo, si tiene un sello de fecha en el nombre de su archivo), asegúrese de reemplazarlo por otro. Es decir:fuente
Path.GetInvalidPathChars
pero noPath.GetInvalidFileNameChars
, como fue mi caso.Para mí, el problema era un personaje
""
incrustado de izquierda a derecha invisible para el ojo humano .Se atascó al principio de la cadena (justo antes de la 'D'), después de copiar y pegar la ruta, desde la pestaña de seguridad de las propiedades del archivo de Windows.
Entonces esas, idénticas a primera vista, dos líneas son en realidad diferentes.
fuente
Si está intentando guardar un archivo en el sistema de archivos. Path.Combine no es a prueba de balas, ya que no le ayudará si el nombre del archivo contiene caracteres no válidos. Aquí hay un método de extensión que elimina los caracteres no válidos de los nombres de archivo:
Y el uso puede ser:
fuente
return string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Entre otras cosas que pueden provocar este error:
No puede tener ciertos caracteres en la cadena PathFile completa.
Por ejemplo, estos caracteres bloquearán la función StreamWriter:
puede haber otros caracteres especiales que también lo bloqueen. Descubrí que esto sucede cuando intenta, por ejemplo, poner un sello de fecha y hora en un nombre de archivo:
Una forma de evitar este problema es reemplazar los caracteres problemáticos en NewFileOutS por otros benignos:
¡Espero que esto le ahorre a alguien algunos dolores de cabeza ...!
fuente
Si recibe este error en PowerShell, lo más probable es que esté utilizando
Resolve-Path
para resolver una ruta remota, por ejemploEn este caso,
Resolve-Path
devuelve un objeto que, cuando se convierte en una cadena, no devuelve una ruta válida. Devuelve la ruta interna de PowerShell:La solución es usar la
ProviderPath
propiedad en el objeto devuelto porResolve-Path
:fuente
Intente cambiar:
Server.MapPath("/UploadBucket/Raw/")
a
Server.MapPath(@"\UploadBucket\Raw\")
fuente
MapPath
son lo suficientemente inteligentes como para averiguarlo de cualquier manera.@
en la parte delantera de la cadena que escapa a esos.Este fue mi problema, que puede ayudar a otra persona, aunque no fue el problema del OP:
Determiné el problema generando mi ruta a un archivo de registro y descubrí que no se formatea correctamente. Lo correcto para mí fue bastante simple:
fuente
¿ Ayuda el uso del método Path.Combine ? Es una forma más segura de unir rutas de archivos. Podría ser que tenga problemas para unir los caminos
fuente
Estoy usando el generador de expresiones (limitado) para una variable para usar en una tarea simple del sistema de archivos para hacer un archivo de un archivo en SSIS.
Este es mi truco rápido y sucio para eliminar los dos puntos y detener el error: @ [User :: LocalFile] + "-" + REPLACE ((DT_STR, 30, 1252) GETDATE (), ":", "-") + ".xml"
fuente
Tuve el mismo problema hoy. El archivo que intentaba cargar en mi código estaba abierto para editarlo en Excel. Después de cerrar Excel, ¡el código comenzó a funcionar!
fuente
Si el valor es una URL de archivo como file: // C: / lo que sea, use la clase Uri para traducir a un nombre de archivo normal:
var localPath = (new Uri(urlStylePath)).AbsolutePath
En general, el uso de la API proporcionada es la mejor práctica.
fuente