接收IOException

时间:2016-11-28 17:26:13

标签: c# filestream

我尝试这个时遇到IOException错误,而且我不确定我做错了什么:

enter image description here

这是我的代码:

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);

2 个答案:

答案 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方法在这种情况下看起来毫无意义 - 你可以用字符串常量做同样的事情,或者在构造函数中创建一个只读字符串。