C#中FileStream的替代方案

本文关键字:方案 FileStream | 更新日期: 2023-09-27 18:21:58

在Visual Studio环境中,项目A(ASP.NET)在我的解决方案中引用项目B(C#),如下所示:

Solution
├─Project B
│ ├─data.txt
│ └─process.cs  (a class BB with static initialization new FileStream("data.txt"))
└ Project A (referencces Project B)
  ├─bin
  │ └─data.txt (copied from project B each time project B changes)
  └─Controllers
    └─mycontroller.cs (references the class BB)

问题是,当我运行应用程序时,工作目录是C:'Program Files (x86)'IIS Express',因此无法从bin中的process.cs编译版本读取data.txt。

目前,为了解决这个问题,我手动将data.txt复制到这个文件夹中,但这个解决方案是不可行的。请注意,对B的更改必须与依赖于B的其他项目一致,这些项目并不都是ASP.NET项目。

我应该做哪些更改,以便在不依赖我将data.txt文件复制到IIS Express目录的情况下,可以从我的项目访问data.txt

我想将我的程序移植到Azure Online,但我不能依赖此方法。谢谢你的帮助。

其他链接答案:

  • 这个答案是特定于ASP.NET的,我无法添加服务器。MapPath,因为项目不知道它
  • 这个答案引用了项目路径,但没有提示我如何修改它们

C#中FileStream的替代方案

"注意,对B的更改必须与依赖于B的其他项目一致,这些项目并不都是ASP.NET项目"

不确定连贯性在其他依赖于项目B的项目中对你意味着什么。。。但以下选项浮现在脑海中-

  1. 将data.txt作为资源嵌入到为项目B生成的程序集中。然后,项目B可以将文件作为资源读取(假设生成后不需要修改文件内容)有关处理程序集中嵌入的资源的信息,请参见ResourceManager类。http://msdn.microsoft.com/en-us/library/system.resources.resourcemanager(v=vs.110).aspx

  2. 如果它适用于项目B的所有客户端,请扫描子目录中的文件。。这更让人生气。。但实际上取决于项目B的场景。

确保data.txt部署在的某个地方。然后,使您的库将其路径或基本目录路径作为参数。库的调用程序是具有如何获取文件路径的具体知识的应用程序。

或者,将.txt作为管理资源嵌入到DLL中。

对我来说,你的问题不是复制文件,而是复制文件的位置。共享文件应保存在所有应用程序都可以访问的共享/中心位置。在你目前的情况下,这可能是(这并不是详尽的)。。。

  • 数据库Blob
  • 显式文件位置
  • 在线,通过HTTP检索
  • 在线,通过FTP检索
  • 网络定位
  • 在程序之间运行一个小型TCPIP服务器,以便其中一个充当源进程,子进程请求该文件

关于将您的应用程序移植到Azure,Azure提供了Blob存储以及以不安全和安全的方式访问文件的功能(请参阅共享访问签名)。

HTH

难道不能用项目A配置项目B吗?我的意思是,将txt文件的路径提供给从项目a到项目B的配置类的某个静态字段。