У меня есть следующий код C#:Почему текст не записывается на диск?
private const int APPENDBUFFERSIZE = 65536;
private StreamWriter _streamWriter;
private FileStream _fileStream;
private BufferedStream _bufferedStream;
public void Open(string fileName)
{
_fileStream = File.Open(fileName, FileMode.Create, FileAccess.Write, FileShare.Read);
_bufferedStream = new BufferedStream(_fileStream, APPENDBUFFERSIZE);
_streamWriter = new StreamWriter(_bufferedStream);
}
public void Write(string data)
{
_streamWriter.Write(data);
}
public void Close()
{
if (_streamWriter != null)
{
_streamWriter.Flush();
_streamWriter.Dispose();
_streamWriter = null;
}
if (_bufferedStream != null)
{
_bufferedStream.Dispose();
_bufferedStream = null;
}
if (_fileStream != null)
{
_fileStream.Dispose();
_fileStream = null;
}
}
Почему не данные будут записаны на диск, пока я не позову Закрыть? Технические данные: я пишу 9000 KB ценность данных
StreamWriter
класс имеет:
internal const int DefaultBufferSize = 1024;
FileStream
класс имеет:
internal const int DefaultBufferSize = 4096;
BufferedStream
должен быть 65536
байт. filename
полный путь к файлу на моем локальном диске D.
filename = "D:\\Folder1\Folder2\\file.txt"
И у меня есть права на запись в него. Для вызова Write
я использую что-то подобное:
data = "1234567889|ababababababababbabababababababababababab"
Кроме того, я не хочу, чтобы избавиться от буфера, я просто хочу, чтобы поток, чтобы промывать каждый сейчас и потом, и увидеть его на диск. Странно иметь файл 0 KB
, и внезапно, когда вы закрываете его, он большой. Таким образом, по всем измерениям все буферы должны переполняться, если не записываться в следующий поток/диск. Тем не менее, только Windows показывает размер файла больше 0 KB
, после Close
, хотя я ждал несколько минут после того, как запись в файл закончилась.
Любые идеи?
Спасибо, Ciprian.
UPDATE: размер отображается 0 в столбце размера проводника Windows. Если я посмотрю на свойства файла, размер больше 0 (это верно). После того, как я вернусь из окна свойств и обновляю окно проводника Windows, столбец размера обновляется до значения, большего чем 0. Я просто обновляю окно проводника Windows, не глядя на свойства файла, столбец размера остается равным 0. Также, если я открываю файл с блокнотом ++, он имеет все данные, а обновление в окне проводника Windows показывает правильное значение в столбце размера. Поэтому моя проблема, вероятно, не из-за кода, который я написал, но вы никогда не знаете.
где вы пишете данные, вы просто пытаетесь написать пустой charcter для всего? –
На моем собственном ПК. filename имеет вид smth: D: \ Folder1 \ Folder2 \ file.txt данные похожи на «09890890 | ajhdjaskdhaskdjhaskdhasjkdhasksjdha» для каждого вызова Write – MciprianM
нет, что вы пытаетесь записать в него? –