簡體   English   中英

不支持給定的路徑格式; 流作家

[英]the given path format is not supported; streamwriter

下面是堆棧跟蹤;

System.NotSupportedException
  HResult=0x80131515
  Message=The given path's format is not supported.
  Source=mscorlib
  StackTrace:
   at System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(String fullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access)
   at EntryLog.Handlers.StreamEntryLogs.StreamWritter(String log, String foldername) in C:\Users\JNyingi\source\repos\EntryLog\EntryLog\Handlers\StreamEntryLogs.cs:line 31
   at EntryLog.EntryLog.LogWarning(String Warning) in C:\Users\JNyingi\source\repos\EntryLog\EntryLog\EntryLog.cs:line 55
   at EntryLogConsoleTest.Program.Main(String[] args) in C:\Users\JNyingi\source\repos\EntryLogConsoleTest\EntryLogConsoleTest\Program.cs:line 21

  This exception was originally thrown at this call stack:
    System.Security.Permissions.FileIOPermission.EmulateFileIOPermissionChecks(string)
    System.IO.FileStream.Init(string, System.IO.FileMode, System.IO.FileAccess, int, bool, System.IO.FileShare, int, System.IO.FileOptions, Microsoft.Win32.Win32Native.SECURITY_ATTRIBUTES, string, bool, bool, bool)
    System.IO.FileStream.FileStream(string, System.IO.FileMode, System.IO.FileAccess)
    EntryLog.Handlers.StreamEntryLogs.StreamWritter(string, string) in StreamEntryLogs.cs
    EntryLog.EntryLog.LogWarning(string) in EntryLog.cs
    EntryLogConsoleTest.Program.Main(string[]) in Program.cs


異常來自以下幾行;

string filePath = System.IO.Path.Combine(EntryLog.LogPath.AbsolutePath, currentTimeFilename + " - " + $"{foldername}.log");


var fileStreamer = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write);
var streamWriter = new StreamWriter(fileStreamer);

LogPath是通過該方法獲取的;

LogPath = new Uri(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location)); 

我已經嘗試了各種調試方式,但它總是在 StreamWriter 上拋出上述異常。 請幫助我解決這個問題。 我正在使用 4.5.2 .net 框架

文件路徑

有問題的文件路徑是這樣的; C:\\Users\\JNyingi\\source\\repos\\EntryLogConsoleTest\\EntryLogConsoleTest\\bin\\Debug

當前時間和文件夾名稱

string currentTimeFilename = DateTime.Now.ToString("yyyy-MM-dd HH:mm");

string foldername = "Log"

問題是:在您的文件名中

string currentTimeFilename = DateTime.Now.ToString("yyyy-MM-dd HH:mm"); 
                                                                 ^

將其更改為-_甚至. 例如,錯誤消失

string currentTimeFilename = DateTime.Now.ToString("yyyy-MM-dd HH_mm"); 

使用ILSpy,您可以發現EmulateFileIOPermissionChecks方法(引發NotSupportedException )的代碼是:

internal static void EmulateFileIOPermissionChecks(string fullPath)
{
    if (AppContextSwitches.UseLegacyPathHandling || !PathInternal.IsDevice(fullPath))
    {
        if (PathInternal.HasWildCardCharacters(fullPath))
        {
            throw new ArgumentException(Environment.GetResourceString("Argument_InvalidPathChars"));
        }
        if (PathInternal.HasInvalidVolumeSeparator(fullPath))
        {
            throw new NotSupportedException(Environment.GetResourceString("Argument_PathFormatNotSupported"));
        }
    }
}

所以你的路徑包含無效字符。

編輯

如果在您的設置中,小時 - 分鍾分隔符是一個冒號(請參閱您的日期時間格式的字符串),請考慮 ':' 不能在路徑中使用,而是在驅動程序字母之后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM