"Format danej ścieżki nie jest obsługiwany."

W moim serwisie internetowym mam następujący kod:

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 danej ś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 jako C:\\webprojects\\webservices\\UploadBucket\\Raw\\.

Co jest nie tak z tym sznurkiem?
Author: sashoalm, 2011-09-08

13 answers

Zamiast używać str_uploadpath + fileName, spróbuj użyć System.IO.Path.Combine zamiast:

Path.Combine(str_uploadpath, fileName);

Który zwraca łańcuch znaków.

 131
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-08 13:27:42

Widzę, że twórca dowiedział się, że wystąpił błąd podczas próby zapisania nazwy pliku z całą ścieżką. W rzeczywistości wystarczy mieć ":" w nazwie pliku, aby uzyskać ten błąd. Jeśli w nazwie pliku może być ":" (na przykład jeśli w nazwie pliku znajduje się znacznik daty), upewnij się, że zastąpisz je czymś innym. I. E:

string fullFileName = fileName.Split('.')[0] + "(" + DateTime.Now.ToString().Replace(':', '-') + ")." + fileName.Split('.')[1];
 55
Author: Daniel Hedenström,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-17 13:37:38

Dla mnie problemem był niewidzialny dla ludzkiego oka "‪" od lewej do prawej osadzanie znaku .
Utknął na początku łańcucha (tuż przed 'D'), po skopiowaniu-wklejony ścieżkę, z karty Właściwości pliku windows bezpieczeństwo.

var yourJson = System.IO.File.ReadAllText(@"D:\test\json.txt"); // Works
var yourJson = System.IO.File.ReadAllText(@"‪D:\test\json.txt"); // Error
Więc te, identyczne na pierwszy rzut oka, dwie linie są w rzeczywistości różne.
 36
Author: Oleg Grishko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-12-02 13:51:52

Jeśli próbujesz zapisać plik w systemie plików. / Align = "left" / Combine nie jest wypunktowany, 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:

public static string ToSafeFileName(this string s)
{
        return s
            .Replace("\\", "")
            .Replace("/", "")
            .Replace("\"", "")
            .Replace("*", "")
            .Replace(":", "")
            .Replace("?", "")
            .Replace("<", "")
            .Replace(">", "")
            .Replace("|", "");
    }

A użycie może być:

Path.Combine(str_uploadpath, fileName.ToSafeFileName());
 22
Author: ThiagoPXP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-26 23:04:04

Między innymi, które mogą powodować ten błąd:

Nie możesz mieć pewnych znaków w pełnym łańcuchu ścieżek.

Na przykład, te znaki spowodują awarię funkcji StreamWriter:

"/"  
":"

Mogą być też inne znaki specjalne, które ją niszczą. Zauważyłem, że dzieje się tak, gdy próbujesz na przykład umieścić znacznik DateTime w nazwie pliku:

AppPath = Path.GetDirectoryName(giFileNames(0))  
' AppPath is a valid path from system. (This was easy in VB6, just AppPath = App.Path & "\")
' AppPath must have "\" char at the end...

DateTime = DateAndTime.Now.ToString ' fails StreamWriter... has ":" characters
FileOut = "Data_Summary_" & DateTime & ".dat"
NewFileOutS = Path.Combine(AppPath, FileOut)
Using sw As StreamWriter = New StreamWriter(NewFileOutS  , True) ' true to append
        sw.WriteLine(NewFileOutS)
        sw.Dispose()
    End Using

Jednym ze sposobów uniknięcia tego problemu jest zastąpienie znaków problemowych w NewFileOutS łagodnymi jedynki: {]}

' clean the File output file string NewFileOutS so StreamWriter will work
 NewFileOutS = NewFileOutS.Replace("/","-") ' replace / with -
 NewFileOutS = NewFileOutS.Replace(":","-") ' replace : with - 

' after cleaning the FileNamePath string NewFileOutS, StreamWriter will not throw an (Unhandled) exception.
Mam nadzieję, że to uratuje komuś ból głowy...!
 7
Author: Michael Herman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-06 20:40:20

Jeśli pojawi się ten błąd w PowerShell, najprawdopodobniej dlatego, że używasz Resolve-Path do rozwiązywania zdalnej ścieżki, np.

 Resolve-Path \\server\share\path

W tym przypadku Resolve-Path zwraca obiekt, który po przekonwertowaniu na łańcuch znaków nie zwraca prawidłowej ścieżki. Zwraca wewnętrzną ścieżkę PowerShella:

> [string](Resolve-Path \\server\share\path)
Microsoft.PowerShell.Core\FileSystem::\\server\share\path

Rozwiązaniem jest użycie właściwości ProviderPath na obiekcie zwracanym przez Resolve-Path:

> Resolve-Path \\server\share\path | Select-Object -ExpandProperty PRoviderPath
\\server\share\path
> (Resolve-Path \\server\share\path).ProviderPath
\\server\share\path
 3
Author: Aaron Jensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-25 17:14:56

Spróbuj zmienić:

Server.MapPath("/UploadBucket/Raw/")

Do

Server.MapPath(@"\UploadBucket\Raw\")

 2
Author: JimSTAT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-08 13:41:18

To był mój problem, który może komuś pomóc -- chociaż nie był to problem OP:

DirectoryInfo diTemp = new DirectoryInfo(strSomePath);
FileStream fsTemp = new FileStream(diTemp.ToString());

Określiłem problem, wysyłając moją ścieżkę do pliku dziennika i stwierdzając, że nie formatuje się poprawnie. Poprawne dla mnie było po prostu:

DirectoryInfo diTemp = new DirectoryInfo(strSomePath);
FileStream fsTemp = new FileStream(diTemp.FullName.ToString());
 2
Author: omJohn8372,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-09 21:05:22

Używa ścieżki .Połącz pomoc w metodzie? Jest to bezpieczniejszy sposób łączenia ścieżek plików. Może być tak, że ma problemy z połączeniem ścieżek razem

 1
Author: Kurru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-08 13:26:32

Miałem ten sam problem dzisiaj. Plik, który próbowałem załadować do mojego kodu, był otwarty do edycji w Excelu. Po zamknięciu Excela kod zaczął działać!

 1
Author: Ryano,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-01-29 08:09:27

Używam (ograniczonego) Kreatora wyrażeń dla zmiennej do użycia w prostym zadaniu systemu plików, aby utworzyć archiwum pliku w SSIS.

To jest mój szybki i brudny hack, Aby usunąć dwukropki, aby zatrzymać błąd: @[User:: LocalFile] + " - " + REPLACE ((DT_STR, 30, 1252) GETDATE(), ":", "-") + ".xml "

 0
Author: Adam Noël,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-16 01:16:28
Image img = Image.FromFile(System.IO.Path.GetFullPath("C:\\ File Address"));

Potrzebujesz getfullpath by pointed class. Miałem ten sam błąd i naprawiony...

 0
Author: Mr.Touraj Ostovari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-10 21:05:25

Jeśli wartość jest adresem URL pliku, takim jak file: / / C: / whatever, Użyj klasy Uri do przetłumaczenia na zwykłą nazwę pliku:

var localPath = (new Uri(urlStylePath)).AbsolutePath

Ogólnie rzecz biorąc, korzystanie z dostarczonego API jest najlepszą praktyką.

 -1
Author: Chris Bordeman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-09 06:16:42