1

编辑:使用“文档”而不是“我的文档”可以消除错误。还建议我使用 Windows 特殊文件夹而不是绝对路径。

我正在尝试用我正在编写的应用程序替换我桌面上的所有快捷方式,该应用程序将拥有自己的快捷方式版本。我计划为新快捷方式提供一些与旧快捷方式相同的功能。在做任何其他事情之前,我认为打开快捷方式指向的文件或文件夹很重要。这是一段示例代码:

public partial class Form1 : Form
{
    Process p1, p2, p3, p4;

    public Form1()
    {
        InitializeComponent();
        p1 = new Process();
        p2 = new Process();
        p3 = new Process();
        p4 = new Process();

        p1.StartInfo.FileName = "cmd";
        p2.StartInfo.FileName = "c:\\Users\\Cheese\\My Documents";
        p3.StartInfo.FileName = "c:\\Users\\Cheese\\AppData";
        p4.StartInfo.FileName = "c:\\Program Files (x86)";
    }

    private void button1_Click(object sender, EventArgs e)
    {
        p1.Start();
    }
    private void button2_Click(object sender, EventArgs e)
    {
        p2.Start();
    }
    private void button3_Click(object sender, EventArgs e)
    {
        p3.Start();
    }
    private void button4_Click(object sender, EventArgs e)
    {
        p4.Start();
    }

}

访问被拒绝错误

这是在 Windows 7 家庭高级版上。在 Visual C# 2010 Express 中调试时出现错误。我在同一个驱动器上的另一个分区上打开了其他几个文件夹,如 System32、AppData 和各种文件夹。我能够打开各种音乐文件并运行不同的程序。除了“我的文档”之外,一切似乎都运行良好。我认为 Windows 文件夹会比个人文件的默认位置有更大的限制。我认为这不是真正的权限问题,但我什至无法猜测可能是什么问题。我可以用资源管理器打开我的文档。我可以将文件移入和移出目录。

这似乎是一件很简单的事情。我知道有很多我不完全了解 Windows 是如何工作的,但是这种情况和其他一些情况让我觉得我可能对 Windows 真的一无所知。我可以查看哪些好书或网络资源来很好地掌握这个操作系统?从新手的角度来看,可能侧重于文件管理和系统权限?

4

3 回答 3

2

你永远不应该使用这些硬编码的路径。
正确的方法是 Environment.SpecialFolder 枚举加上 Environment.GetFolderPath() 像这样

string myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

可以在此处找到其他“SpecialFolder”枚举

将GetFolderPath与 SpecialFolder 枚举一起使用非常重要,因为它会返回针对不同操作系统正确调整的位置、操作系统的本地化以及用户可以对其中一些位置进行的更改。

于 2012-04-24T21:54:58.537 回答
1

在 Windows 7 中,“我的文档”已简单地重命名为“文档”。参见维基百科。您尝试打开的路径在您的操作系统中不存在。

于 2012-04-24T21:52:42.610 回答
1

正如评论的那样,

在 Windows 7 下,“我的文档”是指向“文档”的连接点链接,尝试在连接点上启动进程将失败并出现此错误。改为启动“c:\Users\Cheese\Documents”。

或者,如果这是当前用户我的文档文件夹,您应该向系统询问其路径。

var path=System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments);
于 2012-04-24T22:16:49.837 回答