Create file in memory not filesystem

2020-03-13 08:57发布

I am using a .NET library function that uploads files to a server, and takes as a parameter a path to a file. The data I want to send is small and constructed at runtime. I can save it to a temporary file and then upload it.

Since my application will be deployed in a variety of environments, and I don't know if I'll be able to create the temporary file reliably, it would be preferable to be able to pass in a path to a virtual file in memory.

I can't change the library; I know it executes the following on the file:

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

Is it possible to avoid writing the file to disk?

Thanks

Edit:

The library call is Webclient.UploadFile, as pointed out in the answers, there are many workarounds possible, including using alternative libraries, of which there are many.

标签: c# .net file
3条回答
一夜七次
2楼-- · 2020-03-13 09:12

If the library exposes another method accepting a Stream, you could use a MemoryStream.

If it accepts a SafeFileHandle, you could use a MemoryMappedFile.

Otherwise, you'll have to be satisfied with a file on disk.

查看更多
Ridiculous、
3楼-- · 2020-03-13 09:24

If I understand you correctly, you want to use one of the other WebClient.Upload* methods. For example, if you have your data in a byte[], use UploadData.

Another option, if you want to upload the data as a stream is to use OpenWrite.

查看更多
做个烂人
4楼-- · 2020-03-13 09:27

No, your library is fundamentally inflexible in this aspect, by the fact that it uses FileStream.

Options:

  • Use a ramdrive and specify a path on that, in order to avoid actually hitting disk
  • Depending on where the library comes from, either request a change (if it's closed source) or just make the change if it's open source
  • Use a different library. (What's special about this one?)
查看更多
登录 后发表回答