Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 接收IOException_C#_Filestream - Fatal编程技术网

C# 接收IOException

C# 接收IOException,c#,filestream,C#,Filestream,我尝试此操作时出现IOException错误,我不确定我做错了什么: 这是我的代码: FileStream fStream = new FileStream(PDFFilePath(), FileMode.CreateNew, FileAccess.ReadWrite); 在哪里 我错过了什么 我正在使用这个FileStream来使用PDF保存PDF文档。选择NuGet。它使用一种方法: PdfDocument.Save(Stream stream); 我认为您应该这样指定您的路径: pr

我尝试此操作时出现
IOException
错误,我不确定我做错了什么:

这是我的代码:

FileStream fStream = new FileStream(PDFFilePath(), FileMode.CreateNew, FileAccess.ReadWrite);
在哪里

我错过了什么

我正在使用这个
FileStream
来使用PDF保存PDF文档。选择NuGet。它使用一种方法:

PdfDocument.Save(Stream stream);

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

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

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

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

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

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

这里有几个问题

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

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

第三,如果目标文件夹中不可能已经存在文件,则只希望使用
FileMode.CreateNew
;如果它确实存在,这将引发异常

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


第五,在这种情况下,
PDFFilePath
方法似乎毫无意义-您可以对字符串常量或在构造函数中创建只读字符串执行相同的操作。

您在这里遇到了几个问题

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

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

第三,如果目标文件夹中不可能已经存在文件,则只希望使用
FileMode.CreateNew
;如果它确实存在,这将引发异常

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


第五,
PDFFilePath
方法在这种情况下似乎毫无意义-您可以对字符串常量或在构造函数中创建只读字符串执行相同的操作。

C:\Pictures\而不是C:/Pictures?再想一想,我认为对于FileStream类,您需要指定一个文件而不是一个目录。查看文档:我尝试将其切换到:
m\u sFilePath=@“C:\Pictures\”我得到了同样的结果。。。我只需要指定一个文件路径来保存文档,而不是编辑一个特定的文件。。。自从上大学以来,我就没有使用过
FileStream
。“这将是一个目录名,而不是文件名。”当路径指定的文件已经存在时,出现了一个I/O错误,例如指定
FileMode.CreateNew
。“文件是否已经存在?C:\Pictures\而不是C:/Pictures?”?再想一想,我认为对于FileStream类,您需要指定一个文件而不是一个目录。查看文档:我尝试将其切换到:
m\u sFilePath=@“C:\Pictures\”我得到了同样的结果。。。我只需要指定一个文件路径来保存文档,而不是编辑一个特定的文件。。。自从上大学以来,我就没有使用过
FileStream
,那是一个目录名,而不是一个文件名。“出现了一个I/O错误,例如指定
FileMode.CreateNew
,当路径指定的文件已经存在时。”文件已经存在吗?我会试一试。我会试一试。