Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Variablen in Prozudur übergeben (https://www.delphipraxis.net/87550-variablen-prozudur-uebergeben.html)

-187- 2. Mär 2007 05:49


Variablen in Prozudur übergeben
 
Morgen, ich habe nun noch ein Problem mit meinem Programm und krieg es nicht hin =)

Hier mal ein Teil-Code !

Delphi-Quellcode:
Program Project2;
 
{$APPTYPE CONSOLE}
 
uses
  Windows,SysUtils,ImageHlp,Dialogs,ShellApi;

////Get Drives Procedure
var
  Drive: Char;
  Drives: array of string;
  Idx: Integer;
Procedure GetDrives(Filename:String);
begin
  SetLength(Drives, 0);
  Idx := 0;
  for Drive := 'C' to 'Z' do
  begin
    if GetDriveType(PChar(Drive + ':/')) = DRIVE_FIXED then
    begin
      SetLength(Drives, Idx + 1);
      Drives[Idx] := Drive + ':\';
      Idx := Idx + 1;
    end;
  end;
 
  if Length(Drives) > 0 then
    for Idx := Low(Drives) to High(Drives) do
     WriteLn(Drives[Idx]);
end;
//
 
////Deleting Files Procedure
var
  myFile : TextFile;
  APathFound: String;
  HDD: Char;
Procedure DeletingFiles(Filename:String);
  begin
  for HDD:='C' to 'Z' do
    if SearchForFile(HDD + ':\', Filename, APathFound) then
    begin
       repeat
          DeleteFile(ApathFound+Filename);
          WriteLn(myFile, ':: '+ Filename + ' available on: ' + APathFound)
       until not SearchForFile(HDD + ':\', Filename, APathFound);
      end
    else
    WriteLn(myFile, Filename + ' is not available on ', HDD);
end;
//
//
Wie man sieht arbeitet Deleting Files Procedure mit den Laufwerken c:\ - z:\. Ich hab mir aber eine Prozdur geschrieben um die vorhandenen Laufwerke auszulesen und somit möchte ich das Deleting Files Procedure nur mit den ausgelesenen Laufwerken arbeitet. Ich krieg den Code aber nich hin kann mir jemand helfen?

MFG

Klaus01 2. Mär 2007 06:20

Re: Variablen in Prozudur übergeben
 
Guten Morgen,

habe es jetzt nicht getestet, sollte aber ungefähr so gehen:

Delphi-Quellcode:
Program Project2;

{$APPTYPE CONSOLE}

uses
  Windows,SysUtils,ImageHlp,Dialogs,ShellApi;

type
  TDriveArray : Array of String; // neu

////Get Drives Function

function GetDrives:TDriveArray; // funktion gibt die Laufwerke zurück; Parameter FileName entfernt
var
  Drives: TDriveArray;
  Idx: Integer;
  Drive: Char;
begin
  SetLength(Drives, 0);
  Idx := 0;
  for Drive := 'C' to 'Z' do
  begin
    if GetDriveType(PChar(Drive + ':/')) = DRIVE_FIXED then
    begin
      SetLength(Drives, Idx + 1);
      Drives[Idx] := Drive + ':\';
      Idx := Idx + 1;
    end;
  end;
 // die Ausgabe wird nicht gebraucht
 { if Length(Drives) > 0 then
    for Idx := Low(Drives) to High(Drives) do
     WriteLn(Drives[Idx]);
}
  result:=drives;

end;
//

////Deleting Files Procedure
Procedure DeletingFiles(ADrives:TDriveArray;Filename:String); // neuer Parameter
var
  myFile : TextFile;
  APathFound: String;
  HDD: Char;
  i:Byte;

begin
  for i:=low(ADrives) to high(ADrives) do
    if SearchForFile(ADrives[i] + ':\', Filename, APathFound) then
    begin
       repeat
          DeleteFile(ApathFound+Filename);
          WriteLn(myFile, ':: '+ Filename + ' available on: ' + APathFound)
       until not SearchForFile(ADrives[i] + ':\', Filename, APathFound);
      end
    else
    WriteLn(myFile, Filename + ' is not available on ', ADrives[i]);
end;
//
//

-187- 2. Mär 2007 06:38

Re: Variablen in Prozudur übergeben
 
Moin Klaus =)

Ich musste

var
myFile : TextFile;
APathFound: String;
HDD: Char;
i:Byte;

über die Procdure schreiben weil die Variablen Global sind und nun bekommen ich den Error: Inkompatible Typen: String und TDriveArray in der Zeile:

DeletingFiles('test.txt');

MFG

mkinzler 2. Mär 2007 06:42

Re: Variablen in Prozudur übergeben
 
Die Signatur sieht auch so aus:
Delphi-Quellcode:
Procedure DeletingFiles(ADrives:TDriveArray;Filename:String);

-187- 2. Mär 2007 06:45

Re: Variablen in Prozudur übergeben
 
Damit ist mir ja jetz nicht wirklich geholfen weil ich nich verstehe was daran falsch ist :/

mkinzler 2. Mär 2007 06:48

Re: Variablen in Prozudur übergeben
 
Die Prozedur erwartet 2 Parameter. Du übergibst aber nur den 2. Dessen Typ unterscheidet sich vom erwarteten typ für den 1. Parameter. Und das sagt die Fehlermeldung doch auch aus, oder?

-187- 2. Mär 2007 06:52

Re: Variablen in Prozudur übergeben
 
Achso dann wäre es DeletingFiles(ADrives, 'test.txt');

Aber die Procedure funktioniert nicht so wie ich es mir gewünscht hätte :/

Klaus01 2. Mär 2007 06:59

Re: Variablen in Prozudur übergeben
 
Habe oben noch eine Kleinigkeit geaendert.

Der Aufruf schaut dann so aus:
Delphi-Quellcode:
DeletingFiles(GetDrives,'Dein FileName');
Was funktioniert denn nicht wie erwartet?

Gruesse
Klaus

-187- 2. Mär 2007 07:14

Re: Variablen in Prozudur übergeben
 
Also Fehler bekomm ich nicht aber das Programm macht nich was es machen sollte =)

Die Datei abcdefg.txt liegt in c:\ und d:\ in verschiedenen Ordnern. Nach Programm Auführung sollten sie ja gelöscht sein und es sollte die Auswertung is not available on "Drive".

Das wunderliche daran ist das die Dateien alle noch da sind aber trotzdem die Auswertung is not available on "Drive" kommt =)

Also irgendwas haut da nicht hin es müsste ja die Auswertung is available on "Drive" kommen wenn die Dateien vorhanden sind..

Befehl ist: DeletingFiles(GetDrives,'abcdefg.txt');

Klaus01 2. Mär 2007 07:19

Re: Variablen in Prozudur übergeben
 
Delphi-Quellcode:
function GetDrives:TDriveArray; // funktion gibt die Laufwerke zurück; Parameter FileName entfernt
var
  Drives: TDriveArray;
  Idx: Integer;
  Drive: Char;
begin
  SetLength(Drives, 0);
  Idx := 0;
  for Drive := 'C' to 'Z' do
  begin
    if GetDriveType(PChar(Drive + ':/')) = DRIVE_FIXED then
    begin
      SetLength(Drives, Idx + 1);
      Drives[Idx] := Drive + ':\';  // hier setzt Du :\ an den laufwerksbuchstaben
      Idx := Idx + 1;
    end;
  end;
und hier auch
Delphi-Quellcode:
if SearchForFile(ADrives[i] + ':\', Filename, APathFound) then
An einer Stelle solltest Du es entfernen.

Gruesse
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Seite 1 von 2  1 2      

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