我尝试这个时遇到IOException
错误,而且我不确定我做错了什么:
这是我的代码:
FileStream fStream = new FileStream(PDFFilePath(), FileMode.CreateNew, FileAccess.ReadWrite);
其中
private string PDFFilePath()
{
m_sFilePath = "C:/Pictures/";
return m_sFilePath;
}
我错过了什么?
我正在使用此FileStream
来使用Pdf.Select NuGet保存PDF文档。它使用一种方法:
PdfDocument.Save(Stream stream);
答案 0 :(得分:1)
我认为你应该这样指明你的道路:
private string PDFFilePath(string filename)
{
m_sFilePath = @"C:\Pictures\" + filename;
return m_sFilePath;
}
就像@Reisclef所说,你必须提供一个文件路径,而不是一个目录。由于您使用的是FileMode.CreateNew
,因此它必须是新文件,因此您可能还希望在返回前使用File.Exists(m_sFilePath)
。
答案 1 :(得分:1)
这里有几个问题。
首先,如果您使用C:\Pictures\
这样的路径,它会抱怨尾随\
。
其次,您需要在此处指定实际文件,而不仅仅是目录。在这种情况下仅指定目录(而不是文件)是没有意义的 - 这就是为什么它被称为文件流而不是目录流。我建议使用Path.Combine
。此外,如果您只是尝试将已存在的文件移动到此目录,则应该File.Move
而不是使用FileStream。
第三,如果目标文件夹中不存在该文件,您只想使用FileMode.CreateNew
;如果确实存在,则会抛出异常。
第四,硬编码这样的路径是一种不好的做法。您通常希望从配置文件中获取路径,并确保在尝试执行此操作之前,Pictures目录确实存在;否则,将其部署到另一台计算机时可能会失败。
第五,PDFFilePath
方法在这种情况下看起来毫无意义 - 你可以用字符串常量做同样的事情,或者在构造函数中创建一个只读字符串。