Sample code for 30+ languages & platforms
C

Delete All Files

See more Google Drive Examples

Permanently deletes all files owned by the user without moving it to the trash.

This example works by first getting a list of all fileIds, and then iterating over the list to delete each file.

See Google Drive Files delete for more information.

Chilkat C Downloads

C
#include <C_CkAuthGoogle.h>
#include <C_CkRest.h>
#include <C_CkJsonObject.h>
#include <C_CkStringArray.h>
#include <C_CkStringBuilder.h>

void ChilkatSample(void)
    {
    BOOL success;
    HCkAuthGoogle gAuth;
    HCkRest rest;
    BOOL bAutoReconnect;
    HCkJsonObject json;
    int i;
    int numFiles;
    const char *jsonResponse;
    int pageNumber;
    const char *pageToken;
    BOOL bContinueLoop;
    const char *fileId;
    HCkStringArray saFileIds;
    BOOL bHasMorePages;
    HCkStringBuilder sbPath;

    success = FALSE;

    success = TRUE;

    // It requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // This example uses a previously obtained access token having permission for the 
    // Google Drive scope.

    gAuth = CkAuthGoogle_Create();
    CkAuthGoogle_putAccessToken(gAuth,"GOOGLE-DRIVE-ACCESS-TOKEN");

    rest = CkRest_Create();

    // Connect using TLS.
    bAutoReconnect = TRUE;
    success = CkRest_Connect(rest,"www.googleapis.com",443,TRUE,bAutoReconnect);

    // Provide the authentication credentials (i.e. the access token)
    CkRest_SetAuthGoogle(rest,gAuth);

    // Get 10 results per page for testing.  (The default page size is 100, with a max of 1000.
    CkRest_AddQueryParam(rest,"pageSize","10");

    json = CkJsonObject_Create();

    // Send the request for the 1st page.
    jsonResponse = CkRest_fullRequestNoBody(rest,"GET","/drive/v3/files");

    pageNumber = 1;

    bContinueLoop = CkRest_getLastMethodSuccess(rest) && (CkRest_getResponseStatusCode(rest) == 200);

    saFileIds = CkStringArray_Create();

    while (bContinueLoop == TRUE) {

        printf("---- Page %d ----\n",pageNumber);
        CkJsonObject_Load(json,jsonResponse);

        numFiles = CkJsonObject_SizeOfArray(json,"files");
        i = 0;
        while (i < numFiles) {
            CkJsonObject_putI(json,i);
            fileId = CkJsonObject_stringOf(json,"files[i].id");
            printf("name: %s\n",CkJsonObject_stringOf(json,"files[i].name"));
            printf("id: %s\n",fileId);
            CkStringArray_Append(saFileIds,fileId);
            i = i + 1;
        }

        // Get the next page of files.
        // If the "nextPageToken" is present in the JSON response, then use it in the "pageToken" parameter
        // for the next request.   If no "nextPageToken" was present, then this was the last page of files.
        pageToken = CkJsonObject_stringOf(json,"nextPageToken");
        bContinueLoop = FALSE;
        bHasMorePages = CkJsonObject_getLastMethodSuccess(json);
        if (bHasMorePages == TRUE) {
            CkRest_ClearAllQueryParams(rest);
            CkRest_AddQueryParam(rest,"pageSize","10");
            CkRest_AddQueryParam(rest,"pageToken",pageToken);
            jsonResponse = CkRest_fullRequestNoBody(rest,"GET","/drive/v3/files");
            bContinueLoop = CkRest_getLastMethodSuccess(rest) && (CkRest_getResponseStatusCode(rest) == 200);
            pageNumber = pageNumber + 1;
        }

    }

    // Before actually deleting, check for errors...
    if (CkRest_getLastMethodSuccess(rest) != TRUE) {
        printf("%s\n",CkRest_lastErrorText(rest));
        CkAuthGoogle_Dispose(gAuth);
        CkRest_Dispose(rest);
        CkJsonObject_Dispose(json);
        CkStringArray_Dispose(saFileIds);
        return;
    }

    // A successful response will have a status code equal to 200.
    if (CkRest_getResponseStatusCode(rest) != 200) {
        printf("response status code = %d\n",CkRest_getResponseStatusCode(rest));
        printf("response status text = %s\n",CkRest_responseStatusText(rest));
        printf("response header: %s\n",CkRest_responseHeader(rest));
        printf("response JSON: %s\n",jsonResponse);
        CkAuthGoogle_Dispose(gAuth);
        CkRest_Dispose(rest);
        CkJsonObject_Dispose(json);
        CkStringArray_Dispose(saFileIds);
        return;
    }

    // OK, we have the full list of files.  Delete each..
    sbPath = CkStringBuilder_Create();
    numFiles = CkStringArray_getCount(saFileIds);
    i = 0;
    while (i < numFiles) {
        fileId = CkStringArray_getString(saFileIds,i);

        CkRest_ClearAllQueryParams(rest);

        CkStringBuilder_Clear(sbPath);
        CkStringBuilder_Append(sbPath,"/drive/v3/files/");
        CkStringBuilder_Append(sbPath,fileId);

        jsonResponse = CkRest_fullRequestNoBody(rest,"DELETE",CkStringBuilder_getAsString(sbPath));
        if (CkRest_getLastMethodSuccess(rest) != TRUE) {
            printf("%s\n",CkRest_lastErrorText(rest));
            CkAuthGoogle_Dispose(gAuth);
            CkRest_Dispose(rest);
            CkJsonObject_Dispose(json);
            CkStringArray_Dispose(saFileIds);
            CkStringBuilder_Dispose(sbPath);
            return;
        }

        // A successful response will have a status code equal to 204 and the response body is empty.
        // (If not successful, then there should be a JSON response body with information..)
        if (CkRest_getResponseStatusCode(rest) != 204) {
            printf("response status code = %d\n",CkRest_getResponseStatusCode(rest));
            printf("response status text = %s\n",CkRest_responseStatusText(rest));
            printf("response header: %s\n",CkRest_responseHeader(rest));
            printf("response JSON: %s\n",jsonResponse);
            CkAuthGoogle_Dispose(gAuth);
            CkRest_Dispose(rest);
            CkJsonObject_Dispose(json);
            CkStringArray_Dispose(saFileIds);
            CkStringBuilder_Dispose(sbPath);
            return;
        }

        i = i + 1;
        printf("%d: Deleted %s\n",i,fileId);
    }

    printf("All Files Deleted.\n");


    CkAuthGoogle_Dispose(gAuth);
    CkRest_Dispose(rest);
    CkJsonObject_Dispose(json);
    CkStringArray_Dispose(saFileIds);
    CkStringBuilder_Dispose(sbPath);

    }