【问题标题】:C# save file to memory and get a path to use in a method that takes file path as inputC# 将文件保存到内存并获取在以文件路径为输入的方法中使用的路径
【发布时间】:2020-09-10 12:54:32
【问题描述】:

我正在开发一个应用程序插件。基础软件有一个 API 方法,需要输入磁盘中文件的路径。

我正在使用我的应用程序生成文件,但该文件必须读取一次然后删除。 我将文件保存到磁盘,给出方法的路径,然后删除文件。

我想将此文件写入内存并使用 API 方法使用此文件的路径。它将大大增加对其他问题的性能帮助。

有可能吗?

我正在使用 .NET 4.7

谢谢!

【问题讨论】:

  • 如果文件只被读取一次,为什么读入内存会提高性能?
  • 我想避免写入和读取磁盘,它比较慢,我需要更多的错误处理。
  • 您可以尝试实现本地 WebDAV 服务器(基本的 ASP.Net 站点可能就足够了)并将其映射为带有 docs.microsoft.com/en-us/iis/publish/using-webdav/… 的本地路径。理论上它应该给你你想要的,但我自己没有尝试过
  • 无法避免读取文件。使用 StreamReader 或读入内存所花费的时间完全相同。读入内存稍慢,因为您必须将每个数据字节写入内存。

标签: c# .net file memory path


【解决方案1】:

你是这个样子还是别的样子?

string fileName = "<Your File name>";
int bufferSize = 1024;
using (var fileStream = File.Create(fileName, bufferSize, FileOptions.DeleteOnClose))
{
 // now use that fileStream to write wour data and it will auto delete after file close 
}

这会将文件存储在磁盘中,您可以使用路径,它会在文件关闭后自动删除。

【讨论】:

  • 与使用 File.WriteAllLines 方法相比,这样做有什么好处?
【解决方案2】:

基础软件有一个 API 方法,需要输入磁盘中文件的路径。

您是否可以控制或更改基本软件方法?如果基础软件的方法的输入参数类型是字符串类型(听起来很像,但您没有共享任何代码),那么就无法将内存流传递给该方法。

如果您在处理完成后从方法返回响应,即基本方法之后不需要磁盘上可用的文件,那么您可以在磁盘上创建文件,将文件路径作为输入参数传递给方法,然后删除控制返回后的文件

File.Create(filePath);
baseObj.BaseMethod(filePath);
File.Delete(filePath);

但是,您应该显示一些代码以获得更相关的建议。

【讨论】:

  • 提供的 sn-p 是目前正在发生的事情。输入是一个字符串作为文件的路径。我可以为此目的使用内存映射文件吗?
  • 如果您控制并且可以更改基础软件,那么您首先需要使其接受内存流/字节数组作为参数,但是如果您无法更改基础软件的方法,那么它根本不可能当文件实际上不存在于磁盘上时,将文件路径传递给方法。并不是说,在内存中创建的新文件对象只是一个对象,根据定义,除非您将其序列化并将其存储在某个位置(即存储在磁盘上的文件),否则它不会持久化
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2023-03-15
  • 2021-10-21
相关资源
最近更新 更多