Create file in memory not filesystem
Solution 1
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?)
Solution 2
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.
Solution 3
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
.
Stefan
Updated on July 03, 2022Comments
-
Stefan almost 2 years
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.
-
Stefan about 11 yearsI did try UploadString, and now I've tried UploadData. Both caused the server I was communicating with to reboot :-(. I could dig into the format of the POST that WebClient makes to figure out exactly where the problem is, but that would defeat the purpose of using a simple http client like WebClient. Temporary files it is!
-
svick about 11 years@Stefan It caused your server to reboot? Then there is something very wrong with your server and you should figure out what it is.
-
Stefan about 11 yearsHehe...it's not "my" server as such. It's a network connected embedded device, which is out of my control. There are thousands of these things in the field. So pretty much I'm stuck with sending requests in a format it likes. At least I know of one way to get data to it successfully, so I can live with that!