создать файл в виртуальной памяти

Привет, я пытаюсь загрузить локальный файл в библиотеку документов Sharepoint.

Следующий код хорошо работает для загрузки файла в библиотеку документов.

    public void UploadFile(string srcUrl, string destUrl)
    {
        if (!File.Exists(srcUrl))
        {
            throw new ArgumentException(String.Format("{0} does not exist",
                srcUrl), "srcUrl");
        }

        SPWeb site = new SPSite(destUrl).OpenWeb();

        FileStream fStream = File.OpenRead(srcUrl);
        byte[] contents = new byte[fStream.Length];
        fStream.Read(contents, 0, (int)fStream.Length);
        fStream.Close();

        site.Files.Add(destUrl, contents);
    }

Но мне нужно создать текстовый файл в библиотеке документов, который содержит содержимое типа «Это новый файл», не сохраняя его на локальном диске.


person john    schedule 08.12.2010    source источник


Ответы (3)


Вы можете использовать MemoryStream вместо FileStream.

person Cheng Chen    schedule 08.12.2010

Вы можете закодировать строку в массив байтов и создать файл из этого массива.

Кроме того, обратите внимание, что ваш код пропускает SPSite и SPWeb, что довольно опасно, поскольку эти объекты могут занимать много памяти. Вы должны правильно утилизировать их, например. с вложенными операторами using:

using System.Text;

public void AddNewFile(string destUrl)
{
    using (SPSite site = new SPSite(destUrl)) {
        using (SPWeb web = site.OpenWeb()) {
            byte[] bytes = Encoding.GetEncoding("UTF-8").GetBytes(
                "This is a new file.");
            web.Files.Add(destUrl, bytes);
        }
    }
}
person Frédéric Hamidi    schedule 08.12.2010

Что-то такое:

public void UploadText(string text, Encoding encoding, string destUrl)
{
    SPWeb site = new SPSite(destUrl).OpenWeb();
    site.Files.Add(destUrl, encoding.GetBytes(text));
}

PS: вам понадобится кодировка для преобразования строки в массив байтов. Вы можете жестко закодировать один или передать его как параметр, как это сделал я.

person Simon Mourier    schedule 08.12.2010