Как включить файл в систему управления версиями и отредактировать его позже

#c# #tfs #azure-devops

#c# #tfs #azure-devops

Вопрос:

Я создаю игру с использованием C # и пытаюсь включить CSV для анализа предыдущих результатов в таблице лидеров, а также записи в файл, когда игрок заканчивает свою игру.

Это хранимые данные, относящиеся к баллу

Если бы это был единственный проект, я бы сохранил csv в папке bin> Debug и передал путь к файлу StreamReader. Хотя это групповой проект, использующий Azure Devops / TFS в качестве средства управления версиями, поэтому я не слишком уверен, каким способом лучше всего это сделать.

Я пытался сохранить CSV в ресурсах проекта, но я не понял, что это встраивает файл в проект и позволяет читать только из файла.

CSV В настоящее время читается как:

 var file = Properties.Resources.highscores;
char[] splitter = "rn".ToCharArray();
string[] scoresCsv = Properties.Resources.highscores.Split(splitter);

foreach (string score in scoresCsv)
{
    if(!String.IsNullOrEmpty(score))
    {
        var values = score.Split(',');
        highScores.Add(new HighScore(values[0], Convert.ToInt32(values[1]), Convert.ToDateTime(values[2])));
    }
}
this.highScores = highScores.OrderByDescending(x => x.Score).ToList();
  

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

1. Немного смущен этим. Предполагается, что файл с высоким баллом используется разными людьми? Значит, когда они получают новый высокий балл, они проверяют файл, и все остальные видят это, когда извлекают его из системы управления версиями?

Ответ №1:

Выберите окно «Team Explorer» и перейдите в «Source Control Explorer»

Здесь вы увидите глобальное представление проекта.

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

Куда бы вы ни поместили файл, вам просто нужно знать его местоположение из вашего проекта, и вы сможете сопоставить его и отредактировать во время выполнения.

Другой вариант — создать папку в C:ProgramData папка для вашей игры, и вы можете записывать таблицы лидеров непосредственно на их диск C, когда они запускают игру. Люди могли бы изменять таблицы лидеров, но, очевидно, что игра предназначена для обучения программированию, и обычно таблицы лидеров хранятся не на стороне клиента, а на сервере.

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

1. «добавьте свою папку bin в систему управления версиями» не делайте этого.

2. Почему не совсем? @stuartd Он будет обновляться каждый раз, когда вы будете перестраивать свое решение, и последняя сборка будет легко доступна в вашем исходном коде?

3. Это просто не очень хорошая практика — система управления версиями должна содержать то, что вам нужно для сборки приложения, а не выходную сборку. Также — «Он будет обновляться каждый раз, когда вы перестраиваете свое решение, и последняя сборка будет легко доступна в вашем исходном коде» нет, этого не будет — он будет обновляться при проверке ваших изменений.

Ответ №2:

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

 public class ScoreFileHandler
{
    private static string appPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "YourAppName");
    private static string scoreFileName = "highscores.txt";
    private static string filePath = Path.Combine(appPath, scoreFileName);

    public string ReadFile()
    {
        if (!Directory.Exists(appPath))
        {
            Directory.CreateDirectory(appPath);
        }

        if (File.Exists(filePath))
        {
            return File.ReadAllText(filePath);
        }

        return string.Empty; // TODO - caller needs to handle this
    }

    public void WriteFile(string csvScoreData)
    {
        if (!Directory.Exists(appPath))
        {
            Directory.CreateDirectory(appPath);
        }

        File.WriteAllText(filePath, csvScoreData);
    }
}