Если вы можете использовать что-то еще, кроме бесплатной функции, я бы предложил использовать некоторый функтор для удержания счетчика, но в случае, если вы не можете, вы можете попытаться использовать что-то подобное, используя дружбу, чтобы сделать трюк: [ 111]
#include <memory>
class Counter;
int countRecursive(int cancelCondition, std::unique_ptr<Counter> counter = nullptr);
class Counter {
int count = 0;
private:
friend int countRecursive(int, std::unique_ptr<Counter>);
Counter() = default; // the constructor can only be call within the function
// thus nobody can provide one
};
int countRecursive(int cancelCondition, std::unique_ptr<Counter> c)
{
if (c == nullptr)
c = std::unique_ptr<Counter>(new Counter());
if(cancelCondition > 0)
{
c->count++;
return countRecursive(--cancelCondition, std::move(c));
}
else
{
return c->count;
}
}
int main() {
return countRecursive(12);
}
У меня возникла эта проблема, когда я ссылался на URL-адрес библиотеки документов, а не на сам файл назначения.
т.е. попробуйте http: // server имя / имя библиотеки документов / новое имя файла.doc
Никакая подсказка. Но почему Вы не используете Вызовы удаленной процедуры (RPC), которые это - то, как я обычно делаю это.
Я нашел этот пример, который мог бы получить Вас, запустил http://geek.hubkey.com/2007/11/upload-file-to-sharepoint-document.html
Есть ли конкретная причина, Вы не можете только использовать API Sharepoint (например, SPFolder. Файлы. Добавьте) загружать файл? Следующим образом:
http://msdn.microsoft.com/en-us/library/ms454491.aspx
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();
EnsureParentFolder(site, destUrl);
site.Files.Add(destUrl, contents);
}
Alex, Это случилось и со мной. Вероятно, вам следует создать еще одну библиотеку источников или документов и загрузить в нее файлы для тестирования.
Вы можете проверить переменную "destUri", чтобы узнать, указывает ли она точно на ожидаемый список точек доступа.
Моя ситуация такова. сначала создал библиотеку документов «Требования», есть опечатка, затем я изменил заголовок на «Требования». Вы должны заметить, что sharepoint по-прежнему сохраняет URL-адрес этого списка как http: // server: port / Requrements
. Это исключение. Надеюсь, это поможет.
Попробуйте:
void StorePlainFile(string target_url, string filename, byte[] file_bytes)
{
string url = target_url + "/" + filename;
System.Net.WebClient client = new System.Net.WebClient();
client.Credentials = System.Net.CredentialCache.DefaultCredentials;
client.Headers.Add("Overwrite", "F");
byte[] response = client.UploadData(url, "PUT", file_bytes);
}
Я еще не решил свою проблему, поэтому я здесь, но я знаю, почему вы получаете эту ошибку.
Ошибка возникает из-за того, что вы устанавливаете не скрытое, а обязательное поле. В моем случае у меня не было столбцов, и уж точно ни одного необходимого. Однако существует конфликтующее поле управления версиями.
Я намерен 1) загрузить документ и 2) установить метаданные документа. 1) и 2) происходят по отдельным HTTP-вызовам. В идеале я хочу сделать это за один звонок, но не знаю, как это сделать.
Для этого 1) выполняется успешно, поэтому документ появляется в библиотеке. Затем, когда я пытаюсь обновить метаданные, я получаю ошибку 409.
Я почти уверен, что сначала мне нужно вставить шаг между 1) и 2), который сначала загружает список (или манифест) документа, который теоретически будет содержать необходимую информацию о версиях. Все, что мне нужно сделать, это установить нужные поля метаданных и отправить их обратно на сервер.
Нет, мы не хотим использовать Sharepoint API, потому что для него нет библиотек в Java. ; -)