folders and subfolders

If you do AdvGDrive.GetDriveInfo, you get the entire folder structure via AdvGDrive.Drive. You can then loop / check this drive structure hierarchically for folders, subfolders, files you might want to check.


procedure TForm2.SpeedButton1Click(Sender: TObject);
var
  i : integer;
  CI : TCloudItem;
begin
  CI := TCloudItem.Create(nil);
  AdvGDrive1.GetDriveInfo;
  for i := 0 to AdvGDrive1.Drive.Count -1 do
  begin
    if (AdvGDrive1.Drive.Items.ItemType=ciFolder) and (AdvGDrive1.Drive.Items.FileName = 'primeiro') then
    begin
      CI.Assign(AdvGDrive1.Drive.Items);
      if not AdvGDrive1.SearchFolder('segundo') then
      begin
        if CI.ItemType = ciFolder then
          AdvGDrive1.CreateFolder(CI,'segundo');  //this code returns     
  // Invalid Class Typecast
      end;
    end;
  end;
  CI.Free;
end;


it's unclear how this code even compiles.


I would expect the code would be something like:

var
  i,j: integer;
  ci: TCloudItem;
  fnd: boolean;

begin
  AdvGDrive1.GetDriveInfo;
  for i := 0 to AdvGDrive1.Drive.Count -1 do
  begin
    if (AdvGDrive1.Drive.Items.ItemType = ciFolder) and (AdvGDrive1.Drive.Items.FileName = 'primeiro') then
    begin
      ci := AdvGDrive1.Drive.Items;
      fnd := false;
      for j := 0 to ci.Folder.Count - 1 do
      begin
        if (ci.Folder.Items[j].ItemType = ciFolder) and (ci.Folder.Items[j] = 'segundo') then
          fnd := true;
      end;
      if not fnd then
      begin
        AdvGDrive1.CreateFolder(ci,'segundo');
      end;
    end;
  end;
end;


var
  i,j,id: integer;
  ci,ci1: TCloudItem;
  fnd: boolean;
begin
  AdvGDrive1.GetDriveInfo;
  for i := 0 to AdvGDrive1.Drive.Count -1 do
  begin
    if (AdvGDrive1.Drive.Items.ItemType = ciFolder) and (AdvGDrive1.Drive.Items.FileName = 'primeiro') then
    begin
      ci := AdvGDrive1.Drive.Items;
      fnd := false;
      for j := 0 to ci.Folder.Count - 1 do
      begin
        if (ci.Folder.Items[j].ItemType = ciFolder) and (ci.Folder.Items[j].FileName = 'segundo') then
          fnd := true;
      end;
      if not fnd then
      begin
        AdvGDrive1.CreateFolder(ci,'segundo');
      end;
    end;
  end;
  if fnd = false then
  begin
    ci := nil;
    AdvGDrive1.CreateFolder(ci,'primeiro');
    ci1 := TCloudItem(ci);
    AdvGDrive1.CreateFolder(ci,'segundo');
  end;
  AdvGDrive1.FillTreeView(Treeview1);




Should have been: 

var
  i,j: integer;
  ci: TCloudItem;
  fnd: boolean;

begin
  AdvGDrive1.GetDriveInfo;
  for i := 0 to AdvGDrive1.Drive.Count -1 do
  begin
    if (AdvGDrive1.Drive.Items[ i ].ItemType = ciFolder) and (AdvGDrive1.Drive.Items[ i ].FileName = 'primeiro') then
    begin
      ci := AdvGDrive1.Drive.Items[ i ];
      fnd := false;
      for j := 0 to ci.Folder.Count - 1 do
      begin
        if (ci.Folder.Items[j].ItemType = ciFolder) and (ci.Folder.Items[j] = 'segundo') then
          fnd := true;
      end;
      if not fnd then
      begin
        AdvGDrive1.CreateFolder(ci,'segundo');
      end;
    end;
  end;
end;

Bruno Fierens2016-03-20 23:13:46

for j := 0 to ci.Folder.Count - 1 do // 

Hi,


This issue was handled via email.