在内存中创建文件而不是文件系统

时间:2013-05-03 13:19:21

标签: c# .net file

我正在使用.NET库函数将文件上传到服务器,并将参数作为文件的路径。我想发送的数据很小,并在运行时构建。我可以将其保存到临时文件中,然后上传。

由于我的应用程序将部署在各种环境中,并且我不知道我是否能够可靠地创建临时文件,因此最好能够将路径传递给虚拟文件在记忆中。

我无法改变图书馆;我知道它在文件上执行以下命令:

LibraryUploadFunction(string filename) {
    fileName = Path.GetFullPath(fileName);
    FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
    ...
}

是否可以避免将文件写入磁盘?

由于

修改

库调用是Webclient.UploadFile,正如答案中指出的那样,有许多可行的解决方法,包括使用替代库,其中有很多。

3 个答案:

答案 0 :(得分:10)

不,你的图书馆在这方面基本上是不灵活的,因为它使用了FileStream

选项:

  • 使用ramdrive并在其上指定路径,以避免实际碰到磁盘
  • 根据库的来源,请求更改(如果是关闭源代码)或只是 make 更改(如果它是开源的)
  • 使用其他库。 (这个有什么特别之处?)

答案 1 :(得分:6)

如果图书馆公开了另一种接受Stream的方法,则可以使用MemoryStream

如果它接受SafeFileHandle,您可以使用MemoryMappedFile

否则,您必须对磁盘上的文件感到满意。

答案 2 :(得分:2)

如果我理解正确,您希望使用其他WebClient.Upload*方法之一。例如,如果您的数据位于byte[],请使用UploadData

另一个选项是,如果要将数据上传为流,则使用OpenWrite