#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);
}
}