Delphi-PRAXiS
Seite 2 von 6     12 34     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi DelphiNeroApi - Dateien übergeben (https://www.delphipraxis.net/42078-delphineroapi-dateien-uebergeben.html)

scp 15. Mär 2005 23:22

Re: DelphiNeroApi - Dateien übergeben
 
Das mit dem Ordner ist allerdings merkwürdig, schliesslich zeigt er das Datum ja auch im Explorer usw. an.
Entweder ist das ein Bug von Windows, von Delphi oder ein bißchen von beidem: FileAge gibt bei Ordnern generell -1 zurück, da ich den Quelltext dank D3 Pro habe, hab ich das zum Test verändert. und sie da:
nur wenn man z.B. statt dem Ordner 'C:\SIK' das Datum von 'C:\SIK\.' abfragt, gehts.

Da das Datum aber eh egal ist bei Ordnern, würde ich es so lösen:
Delphi-Quellcode:
  If DirectoryExists(FileName) then
    FileTime := now
  else
    FileTime := FileDateToDateTime(FileAge(FileName));
EDIT:
Achja und die Ordner-Verarbeitung ist noch total unbrauchbar.
In der Schleife von AddFileToRootIsoItem ist die Rekursion falsch. Hier muss die Sache z.B. so aussehen:
Delphi-Quellcode:
        If (sr.Name <> '.') and (sr.Name <> '..') then // Zeile neu eingefügt
          AddFileToRootIsoItem(SubDirItem, FileName + '\' + sr.Name); // "FileName + '\' +" hinzugefügt
      until FindNext(sr) <> 0; // diese bleibt wie sie ist
EDIT2: Zusammengefasst :-)

Gina 16. Mär 2005 17:41

Re: DelphiNeroApi - Dateien übergeben
 
Hi,

danke für den Tipp. Bin gestern dort abgestorben, da mein Kopf irgendwie nach einer Pause geschrieen hat ;)

Hab das mal in etwa so eingebaut. Die Abfrage nach '.' und '..' hab ich vorn angestellt. Außerdem hab ich noch ne Try finally eingebaut. Momentan sieht die procedure AddFileToRootIsoItem so aus:

Delphi-Quellcode:
procedure TForm1.AddFileToRootIsoItem(var RootItem: PNeroIsoItem; FileName: String);
var
  FileTime: TDateTime;
  tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_msec: WORD;
  TempItem, SubDirItem: PNeroIsoItem;
  sr: TSearchRec;
begin
  TempItem := RootItem;

  if not (RootItem.fileName = '') then
  begin
    while Assigned(TempItem.nextItem) do
      TempItem := TempItem.nextItem;

    TempItem.nextItem := NeroCreateIsoItem();
    TempItem := TempItem.nextItem;
  end;

  StrPCopy(TempItem.fileName, ExtractFileName(FileName));
  TempItem.fileName[SizeOf(TempItem.fileName) - 1] := #00;

  StrPCopy(TempItem.sourceFilePath, FileName);
  TempItem.fileName[SizeOf(TempItem.sourceFilePath) - 1] := #00;

  If DirectoryExists(FileName) then
     FileTime := now
  else
     FileTime := FileDateToDateTime(FileAge(FileName));
  DecodeDateTime(FileTime, tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec, tm_msec);

  TempItem.entryTime.tm_year := tm_year;
  TempItem.entryTime.tm_mon := tm_mon;
  TempItem.entryTime.tm_wday := DayOfTheWeek(FileTime);
  TempItem.entryTime.tm_mday := DayOfTheMonth(FileTime);
  TempItem.entryTime.tm_yday := DayOfTheYear(FileTime);
  TempItem.entryTime.tm_isdst := WORD(False);
  TempItem.entryTime.tm_hour := tm_hour;
  TempItem.entryTime.tm_min := tm_min;
  TempItem.entryTime.tm_sec := tm_min;

  TempItem.isReference := False;
  TempItem.isDirectory := DirectoryExists(FileName);
  TempItem.importinfo := nil;
  TempItem.userData := nil;
  TempItem.subDirFirstItem := nil;
  SubDirItem := nil;

  if TempItem.isDirectory then
    if FindFirst(IncludeTrailingPathDelimiter(FileName) + '*.*', faAnyFile + faHidden + faArchive + faReadOnly + faSysFile + faDirectory, sr) = 0 then
    try
      repeat
       if (SR.Name <> '.') and (SR.Name <> '..') then begin
        if Assigned(SubDirItem) then
        begin
          SubDirItem.nextItem := NeroCreateIsoItem();
          SubDirItem.fileName := '';
          SubDirItem := SubDirItem.nextItem;
        end
        else
        begin
          SubDirItem := NeroCreateIsoItem();
          SubDirItem.fileName := '';
          TempItem.subDirFirstItem := SubDirItem;
        end;

        AddFileToRootIsoItem(SubDirItem, IncludeTrailingPathDelimiter(FileName) +sr.Name);
       end;
      until FindNext(sr) <> 0;
    finally
      FindClose(sr);
    end;
end;
So ganz klappt es aber noch nicht. Er brennt zwar den Ordner, aber der Inhalt ist nicht zu sehen. Außerdem bekomme ich ständig diese Meldungen:
Zitat:

Joliet names of these files (listed here in ISO-L3) are the same
Als wenn er die Zeichenanzahl des kompletten Pfades mitzählen würde. Mit nem ganz kurzen Pfad konnte ich wenigstens brennen, aber wie gesagt, der Inhalt ist nicht zu sehen. Die Optionen für die langen Pfad- und Dateinamen hab ich noch nicht gefunden... Welche Flags benutzt du?

Bis denne, Gina.

scp 18. Mär 2005 01:06

Re: DelphiNeroApi - Dateien übergeben
 
So, habe endlich die groben Fehler des Demos gefunden, ordner wird einwandfrei gebrannt.

Mal wieder in AddFileToRootIsoItem:
Delphi-Quellcode:
  If DirectoryExists(FileName) then
    StrPCopy(TempItem.sourceFilePath, '')  // sourceFilePath bleibt bei Ordnern leer
  else
    StrPCopy(TempItem.sourceFilePath, FileName);
  TempItem.sourceFilePath[SizeOf(TempItem.sourceFilePath) - 1] := #00; // hier war .filename angegeben
Auch in AddFileToRootIsoItem (in der repeat-Schleife):
Delphi-Quellcode:
          if Assigned(SubDirItem) then
          begin
            SubDirItem.nextItem := NeroCreateIsoItem();
            SubDirItem.nextItem.fileName := ''; // nextitem ist das neue, also hier filename setzen
            SubDirItem := SubDirItem.nextItem;
          end

In IdleCallback und AbortedCallback muss als result false zurückgegeben werden. Möchtest du einen "Abbrechen"-Knopf einbauen, brauchst du eine globale Variable die dann bei drücken auf true gesetzt wird.

jbg 18. Mär 2005 11:02

Re: DelphiNeroApi - Dateien übergeben
 
Würde es dir was ausmachen, wenn man das in den DelphiNeroAPI CVS eincheckt?

scp 18. Mär 2005 13:06

Re: DelphiNeroApi - Dateien übergeben
 
Nö, kein Thema, wäre mir sogar recht.
Ich selbst hab mich mit dem Thema CVS noch nicht so befasst, sonst hätte ich es selbst gemacht.

jbg 18. Mär 2005 13:26

Re: DelphiNeroApi - Dateien übergeben
 
Zitat:

Zitat von scp
Ich selbst hab mich mit dem Thema CVS noch nicht so befasst, sonst hätte ich es selbst gemacht.

Dazu brauchst du aber CVS Schreibrechte, die du wohl nicht hast.

Die Änderungen sind jetzt drinnen (mit ein paar kleineren, nicht die Logik verändernden, Ausbesserungen).

scp 18. Mär 2005 16:10

Re: DelphiNeroApi - Dateien übergeben
 
Hier noch zwei Dinge, die mir beim erstellen einer SVCD aufgefallen sind:
Beim verwenden von NeroCreateIsoTrackEx muss offfensichtlich immer ein Trackname als zweiter Parameter angegeben werden, bei AudioCDs und VideoCDs steht dort jedoch nil. Zu finden in WMDropFiles

Ebenfalls bei WMDropFiles fehlt bei (S)VCDs die Speicherzuweiseng von paBuffer:
Delphi-Quellcode:
          if NeroWriteVideoCD.nwvcdTempPath = '' then
          begin
            GetMem(paBuffer, MAX_PATH);
            try
              //...
            finally
              FreeMem(paBuffer);
            end;

Gina 18. Mär 2005 17:53

Re: DelphiNeroApi - Dateien übergeben
 
Uii, supi, ihr seid meine Helden... :love:

Jetzt hat er auch keine Probleme mehr mit den langen Pfaden. Alle Ordner und Unterordner und Unterunterordner etc. sind da. Jetzt muss ich mich nur noch um die Übergabe der alten Session kümmern.

Hat zufällig einer von Euch eine Idee, warum das Einlesen des Brenners (NeroDeviceInfos) so ewig dauert? Ist das bei Euch auch so? Oder liegt das an meinem PC?

Bis denne, Gina.

scp 18. Mär 2005 19:30

Re: DelphiNeroApi - Dateien übergeben
 
Dauert bei mir etwa 3 Sek. (AMD 2GHz, LG GCE-8320).

Gina 18. Mär 2005 20:02

Re: DelphiNeroApi - Dateien übergeben
 
Ahh, ok, dann scheint es an meinem System zu liegen. Hab zwar einen 3,2 P4, aber vielleicht mag er ja das HT nicht... Ich werds morgen mal auf einem anderen PC probieren. Danke dir.

Hab jetzt nochmal intensiv das Brennen von Ordnern getestet. Auch Namen mit Leerzeichen sind kein Problem. Da bin ich echt beruhigt ;)

Nur das Einlesen der alten Session will nicht klappen. Da hab ich wohl noch nicht den richtigen Befehl gefunden... :( Ich suche weiter...

Thx, Gina.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:41 Uhr.
Seite 2 von 6     12 34     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz