应用程序无法访问文件,即使我可以使用资源管理器复制它
Application Cannot Acces File even though I can copy it using Explorer
我们公司的一个内部应用程序需要在启动时读取文件夹 X 中的文件 aa、bb ... zz。当我(作为对文件夹 X 具有 FullControl 访问权限的人)启动该应用程序时,一切正常。当我的任何同事(他们只有文件夹 X 的读取权限)启动该应用程序时,他们会收到 "Access denied to file aa ... " 异常。
以下例程正在读取文件
public static void readFromBinaryFile(this QIHasFileIo xThis, string xFilePath)
{
if (!System.IO.File.Exists(xFilePath))
throw new System.Exception("File to read " + xFilePath + " does not exist ... ");
if (xThis == null)
throw new NullReferenceException("xThis cannot be null, as it is a readonly reference ... ");
using (BinaryReader xReader = new BinaryReader(new FileStream(xFilePath, FileMode.Open, FileAccess.Read)))
xThis.readObject(xReader);
}
即我正在指定读取模式,这反过来应该只需要对文件夹的读取访问权限。当我的同事转到资源管理器中的文件夹 X 时,然后可以将 aa、bb、... 文件复制到他们的桌面,这意味着他们对这些文件具有读取权限。
所以我很好奇。这种奇怪的行为始于几天前对数据服务器的更改。最显着的变化是 1/ 我的同事不再拥有数据服务器上的管理员权限 2/ 一些 GPO 可能被搞砸了(以前在公司发生过)。 IT部门也很困惑,所以我不知道如何进行。
非常感谢任何提示,
丹尼尔
编辑: 已删除 post 建议使用 FileShare.ReadWrite
。感谢作者的评论,但是保证该文件没有写锁。因此, 线程在这里不相关。
我在读取文件时遇到了类似的问题。问题在于特定用户组(读者组)的 ActiveDirectory 组的访问级别设置不正确。
我不确定您是否在服务器上使用 AD 组身份验证。我建议您检查您的同事拥有的访问权限类型和群组。此外,您需要检查您的应用程序当前如何验证用户访问该目录。
您需要将 FileShare.ReadWrite
添加到传递给 FileStream 构造函数的参数中。
这可以防止应用程序尝试获取独占读锁,这在某些可能存在共享读写锁的情况下可能是不可能的(例如文件保持打开状态以供另一个进程写入)。
我们公司的一个内部应用程序需要在启动时读取文件夹 X 中的文件 aa、bb ... zz。当我(作为对文件夹 X 具有 FullControl 访问权限的人)启动该应用程序时,一切正常。当我的任何同事(他们只有文件夹 X 的读取权限)启动该应用程序时,他们会收到 "Access denied to file aa ... " 异常。
以下例程正在读取文件
public static void readFromBinaryFile(this QIHasFileIo xThis, string xFilePath)
{
if (!System.IO.File.Exists(xFilePath))
throw new System.Exception("File to read " + xFilePath + " does not exist ... ");
if (xThis == null)
throw new NullReferenceException("xThis cannot be null, as it is a readonly reference ... ");
using (BinaryReader xReader = new BinaryReader(new FileStream(xFilePath, FileMode.Open, FileAccess.Read)))
xThis.readObject(xReader);
}
即我正在指定读取模式,这反过来应该只需要对文件夹的读取访问权限。当我的同事转到资源管理器中的文件夹 X 时,然后可以将 aa、bb、... 文件复制到他们的桌面,这意味着他们对这些文件具有读取权限。
所以我很好奇。这种奇怪的行为始于几天前对数据服务器的更改。最显着的变化是 1/ 我的同事不再拥有数据服务器上的管理员权限 2/ 一些 GPO 可能被搞砸了(以前在公司发生过)。 IT部门也很困惑,所以我不知道如何进行。
非常感谢任何提示, 丹尼尔
编辑: 已删除 post 建议使用 FileShare.ReadWrite
。感谢作者的评论,但是保证该文件没有写锁。因此,
我在读取文件时遇到了类似的问题。问题在于特定用户组(读者组)的 ActiveDirectory 组的访问级别设置不正确。 我不确定您是否在服务器上使用 AD 组身份验证。我建议您检查您的同事拥有的访问权限类型和群组。此外,您需要检查您的应用程序当前如何验证用户访问该目录。
您需要将 FileShare.ReadWrite
添加到传递给 FileStream 构造函数的参数中。
这可以防止应用程序尝试获取独占读锁,这在某些可能存在共享读写锁的情况下可能是不可能的(例如文件保持打开状态以供另一个进程写入)。