【问题标题】:Visual Studio 2010 permissions on filesVisual Studio 2010 对文件的权限
【发布时间】:2013-02-14 07:49:07
【问题描述】:

有一个小程序应该打开文件,然后将其输出到控制台添加行号。问题是,无论程序是从 IDE 的命令控制台运行,它都会引发有关文件权限的异常。

我将可执行文件和应该读取的文件(简单的 TXT 文件)移动到多个目录(我的文档、临时文件等)以管理员身份运行控制台,以管理员身份运行 Visual Studio,授予这两个文件的所有权限,但它总是抛出异常。最奇怪的是,一两个星期前,我通过反复试验资助了解决方案,但我不记得了。

这里是例外:

    Exception: System.UnauthorizedAccessException: Access to the path 'C:\Users\Nena
d\documents\visual studio 2010\Projects\Listing 10.6\Listing 10.6\bin\Debug\prog
ram.cs' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, I
nt32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions o
ptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolea
n useLongPath)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access,
FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean
bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode)
   at ListFile.Main(String[] args) in C:\Users\Nenad\documents\visual studio 201
0\Projects\Listing 10.6\Listing 10.6\Program.cs:line 22


Press any key to continue . . .

代码如下:

// ListFile.cs - program to print a listing to the console
//-----------------------------------------------------------

using System;
using System.IO;

class ListFile
{
    public static void Main(string[] args)
    {
        try
        {

            int ctr = 0;
            if (args.Length <= 0)
            {
                Console.WriteLine("Format: ListFile filename");
                return;
            }
            else
            {
                FileStream fstr = new FileStream(args[0], FileMode.Open);
                try
                {
                    StreamReader t = new StreamReader(fstr);
                    string line;
                    while ((line = t.ReadLine()) != null)
                    {
                        ctr++;
                        Console.WriteLine("{0}:  {1}", ctr, line);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine("Exception during read/write: {0}\n", e);
                }
                finally
                {
                    fstr.Close();
                }
            }
        }

        catch (System.IO.FileNotFoundException)
        {
            Console.WriteLine("ListFile could not find the file {0}", args[0]);
        }
        catch (Exception e)
        {
            Console.WriteLine("Exception: {0}\n\n", e);
        }
    }
}

【问题讨论】:

  • 在 windows-explorer 中导航到您的解决方案所在的文件夹。并取消设置只读属性。
  • @Tomtom 他只是从文件中读取并输出内容。

标签: c# visual-studio-2010 exception file-permissions


【解决方案1】:

检查以下可能性之一:

  • 文件未在任何其他窗口/应用程序中打开
  • 运行您的应用程序 .exe 文件 as Administrator(可选额外,启用 UAC 以便您将看到应用程序需要提升权限并明确授予它们的请求,在 Windows8 中禁用 UAC 只会隐藏这些弹出窗口,但不会意味着应用程序将具有更高的权限,因此如果使用 Win8,请小心)
  • 手动将该文件的读取权限设置为Everyone
  • 检查文件是否不在特殊文件夹中(但我认为您已经这样做了,但只是为了确保创建 c:\temp 并将其放在那里)

注意 - 异常表明访问 C:\Users\Nena d\documents\visual studio 2010\Projects\Listing 10.6\Listing 10.6\bin\Debug\prog ram.cs 而不是简单的文本文件时出现问题!!!

请注意,您可能不小心在代码中提供了错误的路径。而Users文件夹是一个特殊文件夹,需要提升权限才能访问,所以最好将整个可执行文件+可读文件移动到一个不会遇到问题的普通文件夹(就像我上面提到的c:\ temp)

【讨论】:

  • 没有什么比另一双眼睛更好的了 :) 移动到任何其他目录(包括 C:\temp)或更改要读取的文件或要执行的程序的权限都没有解决问题。 .. 但是从 Program.cs 更改 EXTENSION --> Program.txt 就可以了。虽然(从我的角度来看 .cs 是一个文本文件,因为您可以使用任何文本编辑器打开它,显然对于 Windows 7)它不是。感谢您的评论,它帮助我看到了问题所在。问候,内纳德
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 2012-01-05
相关资源
最近更新 更多