2016-11-28 96 views
0

我得到了IOException错误,当我尝试这一点,我不知道我做错了什么:接收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

C:\ Pictures \而不是C:\ Pictures?第二个想法,我认为与该FileStream类,你需要指定一个文件,而不是一个目录。请参阅文档:https://msdn.microsoft.com/en-us/library/system.io.filestream(v=vs.110).aspx – Reisclef

+0

我试着将它切换到: 'm_sFilePath = @“C: \ Pictures \“;' 我得到了相同的结果... 我只需要指定一个文件路径来保存文件,而不是编辑一个特定的文件......我没有必须使用FileStream '因为大学... –

+2

这将是一个目录名称,而不是文件名称。 – juharr

回答

1

我想你应该可以指定你的路径是这样的:

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

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

+0

我会给你一个镜头。 –

1

这里有几个问题。

首先,如果您使用类似C:\Pictures\的路径,它会抱怨尾随\。其次,你需要在这里指定一个实际的文件,而不仅仅是一个目录。在这种情况下只指定一个目录(而不是文件)是没有意义的 - 这就是为什么它被称为文件流而不是目录流的原因。我建议为此使用Path.Combine。另外,如果您只是试图将已存在的文件移动到此目录中,则应该执行File.Move而不是使用FileStream。

第三,如果目标文件夹中不存在该文件已存在的可能性,则只需要使用FileMode.CreateNew;如果确实存在,则会引发异常。第四,硬编码这样的路径是一种不好的做法。您通常希望从配置文件中获取路径,并确保在尝试执行此操作之前,Pictures目录确实存在;否则在将其部署到另一台计算机时可能会失败。

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