Mam następujący kod w mojej usłudze sieciowej:
string str_uploadpath = Server.MapPath("/UploadBucket/Raw/");
FileStream objfilestream = new FileStream(str_uploadpath +
fileName, FileMode.Create, FileAccess.ReadWrite);
Czy ktoś może mi pomóc rozwiązać problem z tym komunikatem o błędzie z linii 2 kodu.
Format podanej ścieżki nie jest obsługiwany.
Uprawnienia do folderu są ustawione na pełny dostęp dla wszystkich i jest to rzeczywista ścieżka do folderu.
Punkt przerwania dał mi wartość str_uploadpath
as C:\\webprojects\\webservices\\UploadBucket\\Raw\\
.
Co jest nie tak z tym ciągiem?
fileName
?fileName
to, że jest pusty.Odpowiedzi:
Zamiast używać
str_uploadpath + fileName
, spróbujSystem.IO.Path.Combine
zamiast tego użyć :która zwraca ciąg.
źródło
using System.IO;
powyżej, potem wyczyśćstr_uploadpath + fileName
i napiszPath.Combine(str_uploadpath, fileName)
str_uploadpath
. Jaka jest jego wartość?Widzę, że twórca dowiedział się, że wystąpił błąd podczas próby zapisania nazwy pliku z całą ścieżką. Właściwie wystarczy mieć
":"
w nazwie pliku, aby uzyskać ten błąd. Jeśli":"
nazwa pliku może występować (na przykład, jeśli w nazwie pliku znajduje się znacznik daty), upewnij się, że zastąpiłeś je czymś innym. To znaczy:źródło
Path.GetInvalidPathChars
ale niePath.GetInvalidFileNameChars
, jak to miało miejsce w moim przypadku.Dla mnie problemem był niewidoczny dla ludzkiego oka znak
""
osadzania od lewej do prawej .Utknął na początku ciągu (tuż przed „D”), po skopiowaniu i wklejeniu ścieżki z zakładki zabezpieczeń właściwości pliku systemu Windows.
Więc te, na pierwszy rzut oka identyczne, dwie linie są w rzeczywistości różne.
źródło
Jeśli próbujesz zapisać plik w systemie plików. Path.Combine nie jest punktorem, ponieważ nie pomoże, jeśli nazwa pliku zawiera nieprawidłowe znaki. Oto metoda rozszerzenia, która usuwa nieprawidłowe znaki z nazw plików:
A użycie może być:
źródło
return string.Concat(s.Split(Path.GetInvalidFileNameChars()));
Między innymi, które mogą powodować ten błąd:
Nie możesz mieć niektórych znaków w pełnym ciągu PathFile.
Na przykład te znaki spowodują awarię funkcji StreamWriter:
mogą być też inne znaki specjalne, które go zawieszają. Zauważyłem, że dzieje się tak, gdy próbujesz, na przykład, umieścić znacznik daty i godziny w nazwie pliku:
Jednym ze sposobów uniknięcia tego problemu jest zastąpienie problematycznych znaków w NewFileOutS łagodnymi:
Mam nadzieję, że to oszczędza komuś bólu głowy ...!
źródło
Jeśli pojawi się ten błąd w PowerShell, najprawdopodobniej jest to spowodowane tym, że używasz
Resolve-Path
do rozwiązywania zdalnej ścieżki, npW tym przypadku
Resolve-Path
zwraca obiekt, który po przekonwertowaniu na ciąg nie zwraca prawidłowej ścieżki. Zwraca wewnętrzną ścieżkę PowerShell:Rozwiązaniem jest użycie
ProviderPath
właściwości na obiekcie zwracanym przezResolve-Path
:źródło
Spróbuj zmienić:
Server.MapPath("/UploadBucket/Raw/")
do
Server.MapPath(@"\UploadBucket\Raw\")
źródło
MapPath
są wystarczająco inteligentne, aby je rozgryźć.@
który wymyka się tym.To był mój problem, który może pomóc komuś innemu - chociaż nie był to problem OP:
Ustaliłem problem, wyświetlając ścieżkę do pliku dziennika i stwierdzając, że nie jest poprawnie formatowany. Poprawne dla mnie było po prostu:
źródło
Czy użycie metody Path.Combine pomaga? To bezpieczniejszy sposób łączenia ze sobą ścieżek plików. Możliwe, że ma problemy z połączeniem ścieżek razem
źródło
Używam (ograniczonego) konstruktora wyrażeń dla zmiennej do użycia w prostym zadaniu systemu plików, aby utworzyć archiwum pliku w SSIS.
Oto mój szybki i brudny sposób na usunięcie dwukropków, aby zatrzymać błąd: @ [User :: LocalFile] + "-" + REPLACE ((DT_STR, 30, 1252) GETDATE (), ":", "-") + „.xml”
źródło
Dzisiaj miałem ten sam problem. Plik, który próbowałem załadować do mojego kodu, był otwarty do edycji w programie Excel. Po zamknięciu Excela kod zaczął działać!
źródło
Jeśli wartością jest adres URL pliku, taki jak file: // C: / cokolwiek, użyj klasy Uri, aby przetłumaczyć na zwykłą nazwę pliku:
var localPath = (new Uri(urlStylePath)).AbsolutePath
Ogólnie rzecz biorąc, używanie udostępnionego interfejsu API jest najlepszym rozwiązaniem.
źródło