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,因为项目不知道它
- 这个答案引用了项目路径,但没有提示我如何修改它们
"注意,对B的更改必须与依赖于B的其他项目一致,这些项目并不都是ASP.NET项目"
不确定连贯性在其他依赖于项目B的项目中对你意味着什么。。。但以下选项浮现在脑海中-
-
将data.txt作为资源嵌入到为项目B生成的程序集中。然后,项目B可以将文件作为资源读取(假设生成后不需要修改文件内容)有关处理程序集中嵌入的资源的信息,请参见ResourceManager类。http://msdn.microsoft.com/en-us/library/system.resources.resourcemanager(v=vs.110).aspx
-
如果它适用于项目B的所有客户端,请扫描子目录中的文件。。这更让人生气。。但实际上取决于项目B的场景。
确保data.txt部署在的某个地方。然后,使您的库将其路径或基本目录路径作为参数。库的调用程序是具有如何获取文件路径的具体知识的应用程序。
或者,将.txt作为管理资源嵌入到DLL中。
对我来说,你的问题不是复制文件,而是复制文件的位置。共享文件应保存在所有应用程序都可以访问的共享/中心位置。在你目前的情况下,这可能是(这并不是详尽的)。。。
- 数据库Blob
- 显式文件位置
- 在线,通过HTTP检索
- 在线,通过FTP检索
- 网络定位
- 在程序之间运行一个小型TCPIP服务器,以便其中一个充当源进程,子进程请求该文件
关于将您的应用程序移植到Azure,Azure提供了Blob存储以及以不安全和安全的方式访问文件的功能(请参阅共享访问签名)。
HTH
难道不能用项目A配置项目B吗?我的意思是,将txt文件的路径提供给从项目a到项目B的配置类的某个静态字段。