создать файл в виртуальной памяти - PullRequest
1 голос
/ 08 декабря 2010

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

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

    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);
    }

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

Ответы [ 3 ]

4 голосов
/ 08 декабря 2010

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

1 голос
/ 08 декабря 2010

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

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

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);
        }
    }
}
0 голосов
/ 08 декабря 2010

Примерно так:

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

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

...