2014-02-11 3 views
0

У меня нет проблем с использованием OpenFileDialog (в Windows Forms). Я не могу точно понять, где ошибка с использованием OpenFileDialog в Silverlight (WPF). В моем коде я заинтересован этой строкой, где необходимо показать путь:OpenFileDialog Silverlight

var lines = File.ReadLines(fileStream); 

весь код для Silverlight (не работает):

 private void Button_Click(object sender, RoutedEventArgs e) 
    { 

     OpenFileDialog opendialog = new OpenFileDialog(); 
     System.IO.Stream fileStream = opendialog.File.OpenRead(); 
     if (opendialog.ShowDialog() == true) 
     { 
      var lines = File.ReadLines(fileStream); 
      string pattern = @"set vrouter ""([\w-]+)"""; 

      var matches = 
       lines.SelectMany(line => Regex.Matches(line, pattern) 
        .Cast<Match>()).Where(m => m.Success) 
        .Select(m => m.Groups[1].Value) 
        .Distinct(); 

      foreach (String match in matches) 
      { 

       textBox1.AppendText(match + Environment.NewLine); 
      } 
     } 
    } 
} 

}

Код для Windows Forms (работает хорошо):

 private void button1_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog opendialog = new OpenFileDialog(); 
     if (opendialog.ShowDialog() == DialogResult.OK) 
     { 
      var lines = File.ReadLines(opendialog.FileName); 
      string pattern = @"set vrouter ""([\w-]+)"""; 

       var matches = 
        lines.SelectMany(line=> Regex.Matches(line, pattern) 
         .Cast<Match>()).Where(m => m.Success) 
         .Select(m => m.Groups[1].Value) 
         .Distinct(); 

       foreach (String match in matches) 
       { 

         textBox1.AppendText(match + Environment.NewLine); 
       } 
      } 



    } 

ответ

1

Silverlight работает с повышенной разрешений по умолчанию (просто говоря в песочнице), это означает, что

var lines = File.ReadLines(fileStream); 

Виль не работают, по 2 причинам:

  1. параметр должен быть строкой пути, а не поток в silverlight api, по крайней мере.
  2. File.ReadLines не будет работать, поскольку он работает только для доверенных приложений.

на основе выше, ваша проблема может быть решена с помощью следующего кода:

OpenFileDialog opendialog = new OpenFileDialog(); 
if (opendialog.ShowDialog() == true) 
{ 
    string text = string.Empty; 
    using (StreamReader reader = opendialog.File.OpenText()) 
    { 
    text = reader.ReadToEnd(); 
    } 
    // do stuff here 
} 

или иной опции, предоставляемые MSDN: http://msdn.microsoft.com/en-us/library/cc221415(v=vs.95).aspx

+0

здесь исчезла ошибка, но она появилась в строку кода lines.SelectMany (строка => Regex.Matches (линии, рисунок)/Error . Наилучшее перегруженное соответствие метода для «System.Text.RegularExpressions.Regex.Matches (string, string)» имеет некоторые недопустимые аргументы. – user3214034

+0

не знаю, чего вы пытаетесь достичь, но идея проста: проанализируйте строку, заполнив –

+0

Я добавил код для Windows Forms/Он отлично работает, но мне нужен тот же код в Silverlight.there проблема – user3214034

0

обнаружил, что я искал! этот пример (с OpenFileDialog Silverlight) хорошо работает:

 private void Button_Click(object sender, EventArgs e) 
    { 
     OpenFileDialog opendialog = new OpenFileDialog(); 
     opendialog.Multiselect = true; 
     bool? dialogResult = opendialog.ShowDialog(); 
     if (dialogResult.HasValue && dialogResult.Value) 
     { 
      textBox1.Text = string.Empty; 
      foreach (var file in opendialog.Files) 
      { 
       Stream fileStream = file.OpenRead(); 
       using (StreamReader reader = new StreamReader(fileStream)) 
       { 

        string pattern = @"set vrouter ""([\w-]+)"""; 
        while (!reader.EndOfStream) 
        { 
         var matches = 
          Regex.Matches(reader.ReadToEnd(), pattern) 
           .Cast<Match>().Where(m => m.Success) 
           .Select(m => m.Groups[1].Value) 
           .Distinct(); 

         foreach (var match in matches) 
         { 

          textBox1.Text += val; 
         } 
Смежные вопросы