C # System.IO.File.Exists не работает в Unity

#c# #windows #unity3d #system.io.file

#c# #Windows #unity3d #system.io.file

Вопрос:

Я пытаюсь найти файл на своем компьютере, чтобы я мог сохранить данные для входа в мою игру в этом определенном файле. У меня есть строка, которая содержит путь.

 public string path = "C:/Users/DevelopVR/Documents";
//DevelopVR is my username
  

Тогда у меня будет это позже:

 if (System.IO.File.Exists(path))
{
Debug.Log("Path exists on this computer");
}

else
{
Debug.LogWarning("Path does NOT exist on this computer");
}

  

Я также пытался заменить это:

 else
{
Debug.LogWarning("Path does NOT exist on this computer");
}
  

С этим:

 else if (!System.IO.File.Exists(path))
{
Debug.LogWarning("Path does NOT exist on this computer");
}
  

Но каждый раз, когда он регистрирует ошибку. Поэтому я не знаю, что делать. Похоже, что у других людей такая же проблема. Спасибо, если у вас есть ответ.

Комментарии:

1. попробуйте абсолютный путь, а не просто «Документы», используйте «C:UsersYourUsernameDocuments »

2. Нет. По-прежнему выводит «Путь НЕ существует на этом компьютере»

3. Рассмотрите каталог AppData для получения информации о конфигурации, а не документов.

4. @GraniteSOS Но вы пытаетесь проверить каталог или файл?

5. Я пытаюсь проверить наличие файла

Ответ №1:

Documents это каталог, а не файл, поэтому вместо проверки на File , проверьте на Directory подобное:

 if(File.Exists(path))
{
    // This path is a file
    ProcessFile(path);
}
else if(Directory.Exists(path))
{
    // This path is a directory
    ProcessDirectory(path);
}
  

Помните, что если вы хотите выполнить поиск по файлу, ваш path файл должен иметь имя и расширение, подобное:

 public string path = @"C:/Users/DevelopVR/Documents/MyFile.txt";
  

Комментарии:

1. Мне пришлось поместить данные, хранящиеся внутри папки, внутрь каталога.

Ответ №2:

«Documents» — это не реальный путь, это удобная ссылка на «специальную папку», предоставляемую Windows.

Из https://learn.microsoft.com/en-us/dotnet/api/system.environment.specialfolder?view=netcore-3.1

 // Sample for the Environment.GetFolderPath method
using System;

class Sample
{
    public static void Main()
    {
        Console.WriteLine();
        Console.WriteLine("GetFolderPath: {0}", Environment.GetFolderPath(Environment.SpecialFolder.System));
    }
}
/*
This example produces the following results:

GetFolderPath: C:WINNTSystem32
*/
  

Комментарии:

1. путь, указанный задавшим вопрос, действительно существует

2. Вопрос был отредактирован с тех пор, как я опубликовал этот ответ