этот код выдает это исключение «System.IO.IOException: «Процесс не может получить доступ к файлу, потому что он используется другим процессом «.

#c# #.net

#c# #.net

Вопрос:

 using System;
using System.Collections.Generic;
using System.Text;
using System.IO;

namespace FileManager
{
    class FileManager : IDisposable
    {
        private readonly string filePath;         
        private readonly string copiedFilePath;
        //private readonly Stream openFile;
        private readonly StreamReader streamReader;
        private readonly StreamWriter streamWriter;
        private readonly StreamWriter streamCopy;
        private readonly bool boolAppend = true;


        public FileManager(string filePath, string destinationPath)
        {
            this.filePath = filePath;
            this.copiedFilePath = destinationPath;
            if (!File.Exists(filePath) || !File.Exists(destinationPath))
            {
                throw new Exception("file not found");
            }
            this.streamWriter = new StreamWriter(this.filePath,boolAppend);
            this.streamReader = new StreamReader(this.filePath);
            this.streamCopy = new StreamWriter(this.copiedFilePath, boolAppend);
        }
        public string ReadFromFile()
        {
            string content = streamReader.ReadToEnd();
            return content;
        }
        public void WriteToFile(string content)
        {
             streamWriter.WriteLine(content);
        }
        public void Copy()
        {
            string copiedcontent = ReadFromFile();
            streamCopy.WriteLine(copiedcontent);
        }
        public void Dispose()
        {
            streamCopy.Dispose();
            streamReader.Dispose();
            streamWriter.Dispose();
        }

    }
}

 

Я пытаюсь привести пример того, как реализовать Idisposable интерфейс для моего FileManager calss.
есть ли какой-либо способ удалить streamCopy , StreamReader и StreamWriter в методе dispose() без получения этой ошибки?

заранее спасибо за вашу помощь.

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

1. Это никак не будет выброшено при Dispose. Опубликуйте фактический полный текст исключения. Не только сообщение, полный текст , включая стек вызовов. Это покажет, где на самом деле возникает ошибка. Вы можете получить его с Exception.ToString() помощью или, щелкнув Copy Details во всплывающем окне исключения во время отладки

2. Кроме того, вы не используете StreamReader, StreamWriter. Вы можете использовать Stream.CopyTo(Stream) для копирования с одного экрана на другой

3. эта ошибка выдается в конструкторе

4. Потому что вы открываете один и тот же файл дважды

5. в основном экземпляр находится в using(){} @TheGeneral

Ответ №1:

Вы действительно получаете исключение во время удаления? Я бы предположил, что ошибка в конструкторе. Эти две строки открывают один и тот же файл дважды:

 this.streamWriter = new StreamWriter(this.filePath,boolAppend);
this.streamReader = new StreamReader(this.filePath);
 

Вторая строка, вероятно, вызывает исключение, потому что файл уже открыт.

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

1. да, вторая строка вызывает исключение, есть идеи о том, как его разрешить. Спасибо.

2. Я не понимаю, что вы на самом деле пытаетесь сделать. Вы хотите скопировать файл или прочитать его? Если вам нужен поток для доступа к файлу для чтения и записи, используйте FileStream вместо StreamWriter / StreamReader .