SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Code führt Befehl nicht aus (Datei löschen)

Geprüfte Antwort Dieser Beitrag hat 14 Antworten

Ohne Rang
82 Beiträge
Tim K. erstellt 30 Aug. 2010 10:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo, ich bräuchte mal eure Hilfe:

Ich habe für MVS2010 in c# folgenden Code programmiert

                ClientContext clientContext = new ClientContext("http://meinServer");
                var file = clientContext.Web.GetFileByServerRelativeUrl("/test/test4/test2.txt");
                file.DeleteObject();
                clientContext.ExecuteQuery();



Ich verwende das Clientobjektmodell.

Das Programm läuft ohne Fehlermeldung durch, jedoch auch ohne Ergebnis. Es soll ja meine Datei löschen. Der Pfad stimmt so und bitte nicht wieder die Begründung ich solle Filecollection dafür nutzen, weil ich hab echt keine Ahnung, was mir die Filecollection dafür nutzen soll ;)

Wenn jemand eine Idee hätte, wäre das sehr schön.

Danke !

Alle Antworten

Ohne Rang
82 Beiträge
Tim K. Als Antwort am 31 Aug. 2010 12:25
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Muss man da auch wieder erst "einen Ordner weiter unten" ansetzen ?

so etwas wie:

            ClientContext clientContext = new ClientContext("http://meinServer");

            Web web = clientContext.Web;
            List mylist = web.Lists.GetByTitle("test4");
            Microsoft.SharePoint.Client.File deleteFile = mylist ...

Dort finde ich aber nur eine Möglichkeit Einträge aufzurufen, aber ich möchte ja die Datei ... hätte noch jemand einen Tipp ? :)

Mir fällt da nur            

Microsoft.SharePoint.Client.File deleteFile = clientContext.Web.GetFileByServerRelativeUrl("/test/test4/test2.txt");        ein, doch dann wäre das ja wieder etwas zu weit oben, oder liege ich jetzt total daneben ?

Ich würde mich sehr über Hilfe freuen :)

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 31 Aug. 2010 13:01
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Frage mal file.Exists ab. Ich nehme an, daß Du nicht die richtige Datei im Zugriff hast.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
82 Beiträge
Tim K. Als Antwort am 31 Aug. 2010 13:30
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

tatsächlich,           Oo

string curFile = @"http://meinServer/test/test4/test2.txt";
Console.WriteLine(System.IO.File.Exists(curFile) ? "File exists." : "File does not exist.");

gibt mir "File does not exist." zurück, aber ich sehe die Datei noch immer in der Bibliothek und mit einem strg-klick auf die url wird die Datei fehlerfrei aufgerufen. Was muss ich jetzt machen ?

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 31 Aug. 2010 13:39
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

System.IO.File ist auch nur für das Dateisystem, nicht für SharePoint. Du mußt schon die Methode Deines file-Objektes aus Deinem ersten Post verwenden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
82 Beiträge
Tim K. Als Antwort am 31 Aug. 2010 13:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da steht drin:

Exists = "deleteFile.Exists" hat eine Ausnahme vom Typ "Microsoft.SharePoint.Client.PropertyOrFieldNotInitializedException" verursacht.

"Die Eigenschaft oder das Feld wurde nicht initialisiert. Es ist keine Anforderung erfolgt, oder die Anforderung wurde nicht ausgeführt. Ggf. muss eine ausdrückliche Anforderung erfolgen."

 

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 31 Aug. 2010 14:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das sagt doch alles. Damit Du ein Objekt im Client-OM benutzen kannst, mußt Du es natürlich auch laden (Context.Load und Context.ExecuteQuery)

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
82 Beiträge
Tim K. Als Antwort am 31 Aug. 2010 14:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Aber irgendwas hab ich trotzdem noch falsch, das file existiert scheinbar noch immer nicht - Fehlermeldung wie gerade eben ...

 

            ClientContext clientContext = new ClientContext("http://meinServer");
            Microsoft.SharePoint.Client.File file = clientContext.Web.GetFileByServerRelativeUrl("/test/test4/test2.txt");
            clientContext.Load(file);
            file.DeleteObject();
            clientContext.ExecuteQuery();

 

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 31 Aug. 2010 14:45
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe das mit den Dateien per Client-OM noch nicht getestet und kann deshalb auch nur raten. Wahrscheinlich mußt Du das Web oder die Liste oder den Folder, in dem die Datei liegt auch erst laden.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
82 Beiträge
Tim K. Als Antwort am 31 Aug. 2010 15:02
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe auf einer seite ein sehr ähnliches Stück gefunden:

public void DeleteFileFormLibrary(string siteUrl, string webName, string listName, string subfolder, string attachmentFileName)
{
using (ClientContext clientContext = new ClientContext(siteUrl))
{
string attachmentPath = string.Empty;
if (string.IsNullOrEmpty(subfolder))
{
attachmentPath = string.Format("/{0}/{1}/{2}", webName, listName, Path.GetFileName(attachmentFileName));
}
else
{
attachmentPath = string.Format("/{0}/{1}/{2}/{3}", webName, listName, subfolder, Path.GetFileName(attachmentFileName));
}
var file = clientContext.Web.GetFileByServerRelativeUrl(attachmentPath);
file.DeleteObject();
clientContext.ExecuteQuery();
}
}

Jedoch verstehe ich das nicht so recht - es müsste doch reichen den Pfad (attachmentPath) gleich anzugeben oder steckt da etwas sehr wichtiges drinne, was ich als anfänger nicht entdecke ?

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 31 Aug. 2010 15:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Nichts besonderes, das entspricht im Grunde Deinem Code. Ich habe gerade leider überhaupt keine Zeit, das selbst auszuprobieren...

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
82 Beiträge
Tim K. Als Antwort am 31 Aug. 2010 15:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

jo, hab das nochmal flott durchgecheckt - selbes Ergebnis ^^

Vielleicht finde ich ja noch ein anderes Beispiel, wo das etwas anders bearbeitet wird, aber wenn dir noch was einfallen würde wär das cool :).

Danke schonmal.

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
82 Beiträge
Tim K. Als Antwort am 1 Sept. 2010 12:27
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich hab nochmal versucht alles, was geht zu laden über clientContext.Load und nun geht das ^^

ClientContext clientContext = new ClientContext(siteUrl);
        Web web = clientContext.Web;
        List mylist = web.Lists.GetByTitle(listName);

        //Dateipfad komplett zusammenbauen
        string attachmentPath = string.Empty;
        if (string.IsNullOrEmpty(subfolder))
        {
            attachmentPath = string.Format("/{0}/{1}/{2}", webName, listName, Path.GetFileName(attachmentFileName));           
        }
        else
        {
            attachmentPath = string.Format("/{0}/{1}/{2}/{3}", webName, listName, subfolder, Path.GetFileName(attachmentFileName));
        }
        var file = clientContext.Web.GetFileByServerRelativeUrl(attachmentPath);
       
        //Website,Liste,Datei laden --> sonst geht kein löschen
        clientContext.Load(web);
        clientContext.Load(mylist);
        clientContext.Load(file);

        //löschen der Datei, nachdem sie geladen wurde
        file.DeleteObject();
        clientContext.ExecuteQuery();

 

könnte noch bissel was überflüssiges mit drinne sein, aber da das funktioniert, bin ich zufrieden xD

LG

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 1 Sept. 2010 12:37
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das hatte ich ja oben schon geschrieben, daß die Fehlermeldung genau darauf hindeutet.

Ich vermute, daß Du die Liste weglassen kannst. Das Web wahrscheinlich auch, so daß das Laden des File genügt.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
82 Beiträge
Tim K. Als Antwort am 1 Sept. 2010 13:10
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

eben nicht - hatte web und liste weggelassen und da ging's nicht ...

"Der Weise lernt mehr von der Frage eines Dummen, als der Dumme eines Weisen".