locked
Метод File.ReadAllLines нету в XNA на windows 8, каким методом его заменить? RRS feed

  • Вопрос

  • Помогите пожалуйста молодому разработчику (студенту). Заранее Благодарю..

    Метод File.ReadAllLines нету в XNA на windows 8..

    Я пробывал заменить метод File.ReadAllLines, читав построчно в цикле while но выходит ошибка:

    /* Необработанное исключение типа "System.MethodAccessException" в LevelGame.dll

    Дополнительные сведения: Attempt to access the method failed: System.IO.File.OpenRead(System.String) */

    Исходник (замена метода File.ReadAllLines):

    public void createlevel()
    {
    blocks = new List<block>();



    string line = "";

    int x = 0, y = 0;

    List<string> strings = new List<string>();
    using (var reader = new StreamReader(File.OpenRead("content/levels/level1.txt")))
    {
    while( ( line = reader.ReadLine()) != null )
    {
    string[] b = {line};
    foreach (string str in b)

    {
    foreach (char c in str)
    {

    Rectangle rect = new Rectangle(x, y, 40, 40);
    if (c == 'X')
    {

    block block = new block(rect, blockTexture1);
    blocks.Add(block);
    }
    if (c == 'Y')
    {
    block block = new block(rect, blockTexture2);
    blocks.Add(block);
    }
    x += 40;
    }
    x = 0;
    y += 40;
    }

    }

    }
    }

    18 апреля 2013 г. 8:54

Ответы

  • Здравствуйте,

    Попробуйте таким образом (источник):

    List<string> lines = new List<string>();
    using(StreamReader reader = File.OpenText(filename))
    {
        while (!reader.EndOfStream)
        {
            lines.Add(reader.ReadLine());
        }
    }
    // lines now contains all text in file


    Если не получится, то пользуйтесь: IsolatedStorageFileStream Constructor (String, FileMode, IsolatedStorageFile)
    23 апреля 2013 г. 6:15
  • Еще можно воспользоваться методом ReadToEnd Method и разбить результат по Environment.NewLine

    Для связи [mail]

    24 апреля 2013 г. 21:35
  • Речь идет о разработке под Windows Phone на XNA.

    Там такой метод отсутсвует, через IsolatedStorage тоже не получится.

    Решение такое (пишу прямо тут, в студии не проверял, так что могут быть ошибки)

    Создать в Content файл level.xml.

    Туда написать что-то примерно такое:

    <?xml version="1.0" encoding="utf-8"?>
    <XnaContent xmlns:ContentExtensions="НАЗВАНИЕ ПРОСТРАНСТВА ИМЕН ГДЕ БУДЕТ ЛЕЖАТЬ LevelContent">
      <Asset Type="ContentExtensions:LevelContent">
        <Rows>

          <Item>00000000000000</Item>

          <Item>00000000000000</Item>

          <Item>00000000000000</Item>

          <Item>00000000000000</Item>

    </Rows>

      </Asset>
    </XnaContent>

    Дальше делается класс LevelContent. В нем свойство List<string> Rows.

    В LoadContent загружается этот xml файл.

    var level = Content.Load<LevelContent>("level.xml");

    Все, теперь в level.Rows хранятся ряды из файла. Дальше их можно разобрать как обычно.

    25 апреля 2013 г. 19:14
  • Спасибо всем!!! Но я нашел другое решение моей задачи: Я не стал читать с текста не каким-либо методом а также использовать XML так как я ими вообще не пользовался... Я решил просто в массив записать нужную информацию и работать с массивом... 

    Исходник текстового файла выглядит: 

    000000000
    000000000
    000000000
    0XXX000XX
    000000000
    0000XXXX0
    000000000
    00XXX0000
    000000000
    YYYYYYYYYY

    решение:

    string [,] mas = {{"0000000000"}, {"0000000000"}, {"0000000000"}, {"0XXX000XXX"}, {"0000000000"}, {"0000XXXX00"}, {"0000000000"}, {"00XXX00000"}, {"0000000000"}, {"YYYYYYYYYY"}};

    • Помечено в качестве ответа Аблайхан 26 апреля 2013 г. 14:17
    26 апреля 2013 г. 14:17

Все ответы

  • Здравствуйте,

    Попробуйте таким образом (источник):

    List<string> lines = new List<string>();
    using(StreamReader reader = File.OpenText(filename))
    {
        while (!reader.EndOfStream)
        {
            lines.Add(reader.ReadLine());
        }
    }
    // lines now contains all text in file


    Если не получится, то пользуйтесь: IsolatedStorageFileStream Constructor (String, FileMode, IsolatedStorageFile)
    23 апреля 2013 г. 6:15
  • Еще можно воспользоваться методом ReadToEnd Method и разбить результат по Environment.NewLine

    Для связи [mail]

    24 апреля 2013 г. 21:35
  • Здравствуйте,

    Такой практики на форумах у нас нет. Пожалуйста, задавайте Ваши вопросы здесь, создавайте новые темы и пожалуйста, не забывайте отмечать сообщения, которые помогли Вам, как ответы.

    Спасибо)

    25 апреля 2013 г. 7:15
  • Речь идет о разработке под Windows Phone на XNA.

    Там такой метод отсутсвует, через IsolatedStorage тоже не получится.

    Решение такое (пишу прямо тут, в студии не проверял, так что могут быть ошибки)

    Создать в Content файл level.xml.

    Туда написать что-то примерно такое:

    <?xml version="1.0" encoding="utf-8"?>
    <XnaContent xmlns:ContentExtensions="НАЗВАНИЕ ПРОСТРАНСТВА ИМЕН ГДЕ БУДЕТ ЛЕЖАТЬ LevelContent">
      <Asset Type="ContentExtensions:LevelContent">
        <Rows>

          <Item>00000000000000</Item>

          <Item>00000000000000</Item>

          <Item>00000000000000</Item>

          <Item>00000000000000</Item>

    </Rows>

      </Asset>
    </XnaContent>

    Дальше делается класс LevelContent. В нем свойство List<string> Rows.

    В LoadContent загружается этот xml файл.

    var level = Content.Load<LevelContent>("level.xml");

    Все, теперь в level.Rows хранятся ряды из файла. Дальше их можно разобрать как обычно.

    25 апреля 2013 г. 19:14
  • Речь идет о разработке под Windows Phone на XNA.

    Там такой метод отсутсвует, через IsolatedStorage тоже не получится.

    Какой метод отсутствует не могли бы уточнить? Если Вы про ReadToEnd то он есть в XNA и поддерживается в Windows Phone 8. И почему считаете, что через IsolatedStorage не получится?

    26 апреля 2013 г. 6:49
  • Спасибо всем!!! Но я нашел другое решение моей задачи: Я не стал читать с текста не каким-либо методом а также использовать XML так как я ими вообще не пользовался... Я решил просто в массив записать нужную информацию и работать с массивом... 

    Исходник текстового файла выглядит: 

    000000000
    000000000
    000000000
    0XXX000XX
    000000000
    0000XXXX0
    000000000
    00XXX0000
    000000000
    YYYYYYYYYY

    решение:

    string [,] mas = {{"0000000000"}, {"0000000000"}, {"0000000000"}, {"0XXX000XXX"}, {"0000000000"}, {"0000XXXX00"}, {"0000000000"}, {"00XXX00000"}, {"0000000000"}, {"YYYYYYYYYY"}};

    • Помечено в качестве ответа Аблайхан 26 апреля 2013 г. 14:17
    26 апреля 2013 г. 14:17