ASP.NET, Streamwriter, Filestream - 0-байтовый файл - PullRequest
1 голос
/ 21 января 2010

Это работает:

using (StreamWriter stw = new StreamWriter(Server.MapPath("\\xml\\file.xml")))
{
    stw.Write(xmlEncStr);
}

Это создает пустой файл:

using (FileStream file = new FileStream(Server.MapPath("\\xml\\file.xml"), FileMode.CreateNew))
{
    using (StreamWriter sw = new StreamWriter(file))
    {
        sw.Write(xmlEncStr);
    }
}

Я попытался поиграться с конструктором FileStream и попытался очистить, и я все еще получаю файл нулевого байта. Строка, которую я пишу, представляет собой простую строку ascii в кодировке base64 без специальных символов.

Я знаю, что могу использовать первый пример, но почему не работает второй?

Обновление

Это не проблема Filestream / StreamWriter - это проблема именования переменных. Я исправил код выше, так что теперь обе версии работают. У меня изначально было:

StreamWriter strw = new StreamWriter(file)

Ответы [ 2 ]

2 голосов
/ 21 января 2010

Вы можете немного сократить свой код:

File.WriteAllText(Server.MapPath("\\xml\\file.xml"), xmlEncStr);

Также метод MapPath принимает относительный или виртуальный путь и преобразует его в соответствующий физический путь на сервере. \\xml\\file.xml не относится к вышеуказанному. Вероятно, должно быть: ~/xml/file.xml.

1 голос
/ 21 января 2010

Не воспроизводится.

Это не должно быть проблемой ASP.NET, и вторая форма должна работать (при условии sw == strw ).

Но FileMode.CreateNew потерпит неудачу, если файл уже существует, поэтому, если вы используете фиксированное имя файла, и если оно было создано во время более ранней попытки как пустой файл, это объяснило бы симптомы.

Но @ Darin Dimitrov предлагает лучшую альтернативу.

...