如何写入程序C#的子目录中的文本文件?

时间:2015-03-27 16:51:04

标签: c# filestream streamwriter

我一直在c#中编写一个Windows窗体应用程序。我需要将一些数据写入应用程序目录子目录中的文件。当我创建一个编写器时,我收到一个异常,声明它无法创建一个编写器,因为该文件已在另一个进程中打开。

我有:

StreamWriter writer = new StreamWriter(Application.StartupPath + "@\database\savedStaff.txt");

我所拥有的例外是这样的: "进程无法访问文件....因为它正由另一个进程使用。"

除了正在访问该目录的visual studio之外,我没有其他任何东西。我甚至关闭了我用于版本控制的源代码树,以确保不是问题所在。任何有关解决此问题的提示都将非常感激。

1 个答案:

答案 0 :(得分:0)

错误可能会产生误导。这可能是共享问题,但也可能是权限问题。默认情况下,Program Files目录和所有子目录都需要升级到管理员权限才能写入它们。仅使用管理员帐户登录通常是不够的;您必须明确授予程序以管理员身份运行的权限。这是一个反恶意软件的事情;从理论上讲,除非您通过UAC允许,否则无法修改您的可执行文件。我看到许多程序,包括我自己的程序,报告该文件是由另一个进程打开的,当时Windows拒绝访问的真正原因是基于权限的。

要解决这个问题,您可以:

  • 让程序在运行时请求升级,以便必要时执行此操作。这可以在应用程序清单中指定。
  • 使用安装程序自定义例程在子目录中设置更宽松的权限。我自己为包含配置文件的目录做了这个。
  • 更改正在使用的目录;常见的替代方案包括用户在特定于应用程序的子文件夹下的AppData / Local文件夹,或“我的文档”的子目录(如果该文件代表程序生成的工作单元)。