Question

I have the following code inside my Event Receiver, to copy a file from a document library named "Templates" to a sub-folder inside our "Shared documents" library

    SPDocumentLibrary template = (SPDocumentLibrary)properties.Web.GetList(properties.Web.ServerRelativeUrl + "/OrderTemplates/");
    SPDocumentLibrary projectid = (SPDocumentLibrary)properties.Web.GetList(properties.Web.ServerRelativeUrl + "/Shared Documents/"+properties.ListItemId+"/");
    SPListItem softemplete = null;
    foreach (SPListItem i in template.Items)
        {
            if (i.Name.ToLower().Contains("pof draft"))
                {
                    softemplete = i;

                }
        }
    byte[] fileBytes = softemplete.File.OpenBinary();
    string destUrl = properties.Web.ServerRelativeUrl+ "/"+ projectid.RootFolder.Url + "/" + properties.ListItemId + "/Order Final";
    SPFile destFile = projectid.RootFolder.Files.Add(destUrl, fileBytes, true);

now the above code will work well, till the last line:-

SPFile destFile = projectid.RootFolder.Files.Add(destUrl, fileBytes, true);

which will raise an exception as follow:-

The URL 'Shared Documents/113/Order Final' is invalid. It may refer to a nonexistent file or folder, or refer to a valid file or folder that is not in the current Web.

although the URL Shared Documents/113/Order Final should be valid, as i have a folder named 113 and under it there is a sub folder named Order Final as follow, where the below url is valid:-

http://servername/PM/Shared Documents/113/Order Final

so not sure why i am getting the exception, that the url is not valid??

Was it helpful?

Solution 2

It seems I need to add the name and the file extension as well.

string destUrl = properties.Web.ServerRelativeUrl+ "/"+ projectid.RootFolder.Url + "/" + properties.ListItemId + "/Order Final/POF Draft.xlsx";

OTHER TIPS

Try the absolute url instead of relative. The exception message might just be poorly formatted, but I would expect the full url of the "URL" it's trying to reach be included as the parameter.

Your destUrl parameter should be absolute (or at least try it and see).

If that's not it, perhaps url encoding is needed to replace spaces with "%20" and so on.

EDIT

On second pass, I noticed the url part should likely just be the "file name". Though because you want it to be in a subfolder it would be "subfolder/file name". Right now it looks like you have "library/subfolder/file name". Am I reading that right?

Licensed under: CC-BY-SA with attribution
Not affiliated with sharepoint.stackexchange
scroll top