首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >接收IOException

接收IOException
EN

Stack Overflow用户
提问于 2016-11-28 17:26:12
回答 2查看 53关注 0票数 0

当我尝试这个时,我得到了IOException错误,我不知道我做错了什么:

这是我的密码:

代码语言:javascript
复制
FileStream fStream = new FileStream(PDFFilePath(), FileMode.CreateNew, FileAccess.ReadWrite);

哪里

代码语言:javascript
复制
private string PDFFilePath()
    {
        m_sFilePath = "C:/Pictures/";
        return m_sFilePath;
    }

我遗漏了什么?

我使用这个FileStream来使用Pdf.Select NuGet保存PDF文档。它使用了一种方法:

代码语言:javascript
复制
PdfDocument.Save(Stream stream);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-28 17:42:28

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

代码语言:javascript
复制
private string PDFFilePath(string filename)
{
    m_sFilePath = @"C:\Pictures\" + filename;
    return m_sFilePath;
}

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

票数 1
EN

Stack Overflow用户

发布于 2016-11-28 17:46:11

你这里有几个问题。

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

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

第三,只有在文件不可能已经存在于目标文件夹的情况下才使用FileMode.CreateNew;如果文件确实存在,则会引发异常。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40850106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档