#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 .