2012-12-06 2 views
0

Я не могу получить доступ к файлу, с которым я работаю в программе, которую я пишу. Я не уверен, как именно работать с этим, так как я хочу, чтобы моя программа открывала файл по вашему выбору, что он делает, а затем я хочу, чтобы он мог записывать информацию в аранжировку, что он делает, а затем оттуда, напишите эту информацию из массива в файл, который вы открыли. Когда я пытаюсь запустить какой-то код, он говорит мне: «Процесс не может получить доступ к файлу файла, потому что он используется другим процессом». Вот что я до сих пор. Пожалуйста, дайте мне знать. Спасибо. Проблемными областями является раздел Save_Click кода, где я написал «Это тест» Спасибо.Не удается получить доступ к файлу

 public partial class ListingSearch : Form 
{ 
    string line; 
    DialogResult result; 
    string fileName; 
    int i = 0; 
    string[] first = new string[100]; 
    string[] last = new string [100]; 
    string[] phone = new string [100]; 
    string[] grade = new string [100]; 

    public ListingSearch() 
    { 
     InitializeComponent(); 
     MessageBox.Show("Please be sure to open a file before beginning"); 
    } 

    private void OpenFile_Click(object sender, EventArgs e) 
    { 
     using (OpenFileDialog filechooser = new OpenFileDialog()) 
     { 
      result = filechooser.ShowDialog(); 
      fileName = filechooser.FileName; 
      System.IO.StreamReader file = 
       new System.IO.StreamReader(fileName); 

      while ((line = file.ReadLine()) != null) 
      { 
       string[] words = File.ReadAllText(fileName).Split(new string[] { "\n", "\r\n", ":" }, StringSplitOptions.RemoveEmptyEntries); 
       //firstName.Text = words[4]; 
       //lastName.Text = words[5]; 
       //telephone.Text = words[6]; 
       //GPA.Text = words[7]; 
      } 
      Read.Enabled = true; 
     } 
    } 

    private void Save_Click(object sender, EventArgs e) 
    { 
     File.AppendAllText(fileName, "This is a test"); 
    } 

    private void Read_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show(fileName); 
     MessageBox.Show(File.ReadAllText(fileName)); 
    } 

    private void info_Click(object sender, EventArgs e) 
    { 
     first[i] = firstName.Text; 
     firstName.Text = " "; 
     last[i] = lastName.Text; 
     lastName.Text = " "; 
     phone[i] = telephone.Text; 
     telephone.Text = " "; 
     grade[i] = GPA.Text; 
     GPA.Text = " "; 
     i++; 
    } 

    private void displayinfo_Click(object sender, EventArgs e) 
    { 
     if (i == 0) 
      MessageBox.Show("Nothing to display!"); 
     else 
     for (int j = 0; j < i; j++) 
     { 
      MessageBox.Show(first[j] + " " + last[j] + "\r" + phone[j] + "\r" + grade[j]); 
     } 
    } 
+3

Вы уже получили ответ: Ваш файл используется другим процессом. (Ну ... это может быть ваш собственный процесс в любом случае: P) –

ответ

2

Вы здесь ошибка

File.ReadAllText(fileName) 

потому, что вы открываете тот же файл представлен здесь

System.IO.StreamReader file = new System.IO.StreamReader(fileName); 
+1

что он сказал :-) –

+0

Собственно, позвольте мне прояснить некоторые недоразумения. На самом деле это не вызывает у меня проблемы. Что мне неприятно, так это то, что я нажимаю кнопку сохранения в моей программе и команду Save_Click, где я написал File.AppendAllText (fileText, «This is a test»); где я получаю ошибку. Я и пытаюсь написать дополнительную информацию в этот файл после того, как я его открою, а затем оттуда я хочу закрыть файл и сделать с ним, но я не уверен, как это сделать. Спасибо. – Skynet

0

Вы не закрыли свой StreamReader. C# заблокирует файл, пока вы его не сделаете. Или вы можете использовать StreamWriter после того, как вы закрыли свой StreamReader

1

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

Похоже ваш OpenFile_click событие должно просто выглядеть следующим образом:

using (OpenFileDialog filechooser = new OpenFileDialog()) 
    { 
     result = filechooser.ShowDialog(); 
     fileName = filechooser.FileName; 

     string[] words = File.ReadAllText(fileName).Split(new string[] { "\n", "\r\n", ":" }, StringSplitOptions.RemoveEmptyEntries); 

     Read.Enabled = true; 
    } 
+0

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

+0

@Skynet - Я думаю, ты был на правильном пути. Хорошая вещь об использовании 'File.ReadAllText' заключается в том, что вам не нужно беспокоиться об открытии и закрытии файла. Он обрабатывает все это внутри, поэтому вам не нужно беспокоиться об этом. –

+0

Я еще не пробовал код, но я добираюсь до него, что вы говорите, что я просто делаю дополнительный шаг и накладываю на него системный замок, поэтому его нельзя получить? Я вижу, как это работает. Система должна блокировать ее, чтобы другая программа не изменяла ее до ее завершения. Не знал, что моя программа сделает это. В конце концов, мне нравится ваш метод, но он все равно должен вызвать диалог openfile независимо от того, что. Не уверен, что это будет сделано, но я должен попробовать, а не все, что вы мне ответите. lol – Skynet

Смежные вопросы