我有一个图表控件,我想在绘制图表后保存它。我有一个问题,可能是在我想保存图像的路径中,但我不确定。
代码如下:
string dir = $"{System.IO.Directory.GetCurrentDirectory()}\Charts\{DateTime.Now.ToString()}.png";
chart1.SaveImage(dir, ChartImageFormat.Png);
此目录为:"C:UsersHendawiDesktopESI-USB-APIExamples c# binDebugCharts2023-04-03 5:18:41 PM.png">
得到的错误是:System。NotSupportedException: '给定路径的格式不被支持。'
例如,如果我尝试在桌面上保存文件,它会工作。我不知道我的路怎么了。
编辑(解决):感谢@DanielA.White。在Datetime.Now()中生成的冒号不支持在windows
中命名文件。默认情况下使用DateTime.ToString()
可能包含在文件名中无效的字符(取决于您的语言环境),如'/'和':'。
通常你会在String.Format()
或字符串插值中使用标准日期和时间格式字符串或自定义日期和时间格式字符串来使用当前日期构造一个兼容的文件名:
string dir = $"{System.IO.Directory.GetCurrentDirectory()}\Charts\{DateTime.Now:yyyyMMdd_HHmmss}.png";
chart1.SaveImage(dir, ChartImageFormat.Png);
这将导致
"C:UsersHendawiDesktopESI-USB-APIExamplesC#binDebugCharts20230403_171841.png"
典型的DateTime.Now.ToString()
将在时间格式中包含冒号/正斜杠。例如:4/3/2023 3:35:45 PM
这不是一个有效的文件名。
你可以很容易地写一个扩展,支持一个文件友好的日期时间:
public static string ToFileNameFriendly(this DateTime val)
{
return $"{val.Year}_{val.Month}_{val.Day}_{val.Hour}_{val.Minute}_{val.Second}_{val.Millisecond}";
}