![]() |
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:
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?
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; // // MFG |
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; // // |
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 |
Re: Variablen in Prozudur übergeben
Die Signatur sieht auch so aus:
Delphi-Quellcode:
Procedure DeletingFiles(ADrives:TDriveArray;Filename:String);
|
Re: Variablen in Prozudur übergeben
Damit ist mir ja jetz nicht wirklich geholfen weil ich nich verstehe was daran falsch ist :/
|
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?
|
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 :/ |
Re: Variablen in Prozudur übergeben
Habe oben noch eine Kleinigkeit geaendert.
Der Aufruf schaut dann so aus:
Delphi-Quellcode:
Was funktioniert denn nicht wie erwartet?
DeletingFiles(GetDrives,'Dein FileName');
Gruesse Klaus |
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'); |
Re: Variablen in Prozudur übergeben
Delphi-Quellcode:
und hier auch
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;
Delphi-Quellcode:
An einer Stelle solltest Du es entfernen.
if SearchForFile(ADrives[i] + ':\', Filename, APathFound) then
Gruesse Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr. |
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