访问路径被拒绝

时间:2012-08-21 12:08:26

标签: c# environment-variables streamwriter path-combine

由于某种原因,当我创建将用于我的StreamWriter的路径时,它会创建一个名为test.doc的文件夹而不是名为test.doc的文件

这是我的代码:

fileLocation = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "QuickNote\\");
fileLocation = fileLocation + "test.doc";

有谁能告诉我我的文件路径出错了什么?

更新:

class WordDocExport
{
    string fileLocation;
    public void exportDoc(StringBuilder sb)
    {
        fileLocation = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "QuickNote\\");
        fileLocation = fileLocation + "test.doc";

        if (!Directory.Exists(fileLocation))
        {
            Directory.CreateDirectory(fileLocation);
            using (StreamWriter sw = new StreamWriter(fileLocation, true))
            {
                sw.Write(sb.ToString());
            }
        }

        else
        {
            using (StreamWriter sw = new StreamWriter(fileLocation, true))
            {
                sw.Write(sb.ToString());
            }
        }
    }
}

抱歉延误。我在今天早上离开工作之前就发布了这个问题,而且我很快就想到发布其余的代码。所以,在这里。我还试图在第二行test.doc上做一个Path.Combine,但它也给出了同样的问题。

4 个答案:

答案 0 :(得分:4)

好的,看完完整的代码后:

    fileLocation = fileLocation + "test.doc";

    if (!Directory.Exists(fileLocation))
    {
        Directory.CreateDirectory(fileLocation);     // this is the _complete_ path
        using (StreamWriter sw = new StreamWriter(fileLocation, true))
        {
            sw.Write(sb.ToString());
        }
    }

您实际上是使用以“test.doc”结尾的字符串调用CreateDirectory。路径是否以\结尾并且"<something>\QuickNote\test.doc" 是有效的文件夹路径无关紧要。

您可以使用以下代码替换代码:

string rootFolderPath = Environment.GetFolderPath(
    System.Environment.SpecialFolder.MyDocuments);

string folderPath = Path.Combine(rootFolderPath, "QuickNote");

if (!Directory.Exists(folderPath))
{
    Directory.CreateDirectory(folderPath);
}

fileLocation = Path.Combine(folderPath, "test.doc");

using (StreamWriter sw = new StreamWriter(fileLocation, true))
{
    sw.Write(sb.ToString());
}

无需两次创建作家。

答案 1 :(得分:1)

试试这个:

var fileLocation = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "QuickNote");
fileLocation = Path.Combine(fileLocation, "test.doc");

答案 2 :(得分:1)

如果你有C#4.0版本,你可以直接测试

Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments), "QuickNote", "test.doc");

答案 3 :(得分:0)

Path.Combine将从字符串末尾删除“\”。

您应该在“+”的第二行内容中使用相同的方法。