接收 IOException

Receiving IOException

我尝试此操作时遇到 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);

我认为你应该这样指定你的路径:

private string PDFFilePath(string filename)
{
    m_sFilePath = @"C:\Pictures\" + filename;
    return m_sFilePath;
}

正如@Reisclef 所说,您必须提供文件路径,而不是目录。由于您正在使用 FileMode.CreateNew,它必须是一个新文件,因此您可能还想在返回之前使用 File.Exists(m_sFilePath)

你这里有几个问题。

首先,如果您使用像 C:\Pictures\ 这样的路径,它会抱怨尾随 \

其次,您需要在这里指定一个实际的文件,而不仅仅是一个目录。在这种情况下仅指定一个目录(而不是一个文件)是没有意义的——这就是为什么它被称为文件流而不是目录流。我建议为此使用 Path.Combine。此外,如果您只是想将一个已经存在的文件移动到该目录,您应该 File.Move 而不是使用 FileStream。

第三,如果文件不可能已经存在于目标文件夹中,您只想使用FileMode.CreateNew;如果确实存在,这将抛出异常。

第四,像这样硬编码路径是一种不好的做法。在尝试执行此操作之前,您通常希望从配置文件中获取路径并确保 Pictures 目录确实存在;否则当你将它部署到另一台机器时它可能会失败。

第五,PDFFilePath 方法在这种情况下似乎毫无意义 - 您可以使用字符串常量或在构造函数中创建只读字符串来做同样的事情。