CreateDirectory создает дубликат каталога в общей папке - PullRequest
1 голос
/ 21 мая 2019

У меня есть приложение Winforms, которое должно создать подкаталог в папке Public Documents , если каталог не существует, и сохранить в нем текстовый файл. Однако, если подкаталог не существует, он фактически создает другой каталог с именем Public Documents в «C: / Users / Public», а не просто создает подкаталог в существующей папке «C: / Users / Public». (В приведенном ниже примере подкаталогом является переменная 'token'.) Таким образом, я получаю две папки с именем Public Documents:

enter image description here

Вот мой код:

        if (result == DialogResult.Yes)
        {

            subPath = @"C:\Users\Public\Public Documents\" + token + @"\Tests\";

        }
        else if (result == DialogResult.No)
        {
            subPath = @"C:\Users\Public\Public Documents" + @"\Tests\";
        }
        TestModel testCall = new TestModel
        {
            Name = frm.fileName,
            MethodName = txtApiMethod.Text,
            Parameter = rtxtJson.Text,
            SchemaKey = txtSchemaKey.Text
        };
        bool exists = System.IO.Directory.Exists(subPath);
        string fileName = frm.fileName + ".txt";
        string json = JsonConvert.SerializeObject(testCall);
        string filePath = subPath + fileName;
        if (!exists)
        {
            System.IO.Directory.CreateDirectory(subPath);
        }
        using (StreamWriter file = File.CreateText(filePath))
        {
            file.Write(json);

        }

Может кто-нибудь сказать мне, почему он создает дубликат именованного каталога, и что я могу сделать, чтобы просто создать новый подкаталог в существующем каталоге?

Любая помощь очень ценится!

1 Ответ

4 голосов
/ 21 мая 2019

C:\Users\Public\Public Documents является отображаемым именем. У меня французская винда, и отображаемое имя C:\Users\Public\Documents publics

реальный путь - C:\Users\Public\Documents

Дисплей:

Screenshot showing C:\Users\Public\Documents publics as display name

Реальный:

Screenshot showing C:\Users\Public\Documents as real path

Чтобы убедиться, что вы используете правильный путь к папке (по некоторым причинам вместо этого может использоваться d:, или путь может быть совершенно другим. Никогда не используйте жестко закодированный путь ), вы можете использовать System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonDocuments);, который ссылается на C:\Users\Public\Documents, например:

var PublicDocuments = System.Environment.GetFolderPath(System.Environment.SpecialFolder.CommonDocuments);
if (result == DialogResult.Yes)
{
    subPath = PublicDocuments + @"\"+ token + @"\Tests\";
}
else if (result == DialogResult.No)
{
    subPath = PublicDocuments + @"\Tests\";
}

См. Документацию для получения дополнительной информации о System.Environment.SpecialFolder и System.Environment.GetFolderPath()

...