AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [gelöst] FileClose und CloseFile schliesst Datei nicht?
Thema durchsuchen
Ansicht
Themen-Optionen

[gelöst] FileClose und CloseFile schliesst Datei nicht?

Ein Thema von bigg · begonnen am 28. Jul 2005 · letzter Beitrag vom 28. Jul 2005
Antwort Antwort
Seite 1 von 2  1 2      
bigg
(Gast)

n/a Beiträge
 
#1

[gelöst] FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 17:29
Zunächst einmal öffne ich eine Datei mit folgenden Rechten:
fmOpenRead or fmShareDenyNone Nun springe ich Byte für Byte durch die Datei bis zum Ende, anschließend schliesse ich sie.
Wenn ich die Datei nun umbenennen möchte, bappt mir eine Message um die Ohren.

Wieso nur?
Miniaturansicht angehängter Grafiken
fileclose_167.png  
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 17:40
Wie schließt du sie? Und bist du sicher, dass sie nicht naoch an anderer Stelle im Programm geöffnet wird?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#3

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 17:45
Mit FileClose(Integer) oder CloseFile(File), beides funktioniert nicht,
erst nach dem Beenden meiner Anwendung ist die Datei wieder umbenennbar.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 17:49
Wie keins von beiden Funktioniert nicht? FileClose und CloseFile bedingen auch eine andere Art, wie du die datei öffnest. Ersteres erwartet ein Windows-Dateihandle zweiteres eine Pascal Dateivariable.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#5

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 17:56
Ich habe mehrere Varianten ausprobiert:

TFileStream
FileOpen
AssignFile
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 17:59
Poste mal die mit dem FileStream. Ohne Code bleibt das hier ein Rumgerate.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#7

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 18:07
Zur Zeit kann ich dir nur mit Assignfile dienen, die anderen habe ich nicht gesichert.

Delphi-Quellcode:
function TMD5Form.FileScan(const FileName: String): String;
const MAX_Buffer = 2048;
var AFile: File;
var i, ActSize, FSize, BufferSize, Blocks, Last: Integer;
var Buffer: Array[1..MAX_Buffer] of Byte; // Datenpuffer
var Context: MD5Context;
var Dig: MD5Digest;
var f, c: Extended;
begin
c := 0;
ActSize := 0;

if FileExists(FileName) then
begin

AssignFile(AFile, FileName);
FileMode := fmOpenRead or fmShareDenyNone;

{$i-}
Reset(AFile, 1);
{$i+}

if IOResult = 0 then
begin // Datei konnte geöffnet werden
MD5Init(Context);

    try
      FSize := FileSize(AFile); // Dateigröße in Byte

      if FSize <> 0 then
      begin
      Panel.Visible := True;
      OKBtn.Enabled := False;
      UserEdit.Enabled := False;

      Blocks := FSize div MAX_Buffer; // Anzahl max. Blöcke
      Last := FSize mod MAX_Buffer; // Größe des Rest-Puffer

      if Last <> 0 then
      inc(Blocks); // sofern, unser Restpuffer ungleich 0 Byte groß ist, wird unsere Blockvariable um 1 erhöht

      f := 100 / Blocks;

      for i := 0 to Blocks -1 do // Blöcke einlesen
      begin

        if CancelProcess then
        Break;

        Seek(AFile, ActSize); // Start-Position in Byte (wird von Block zu Block angepasst)

        inc(ActSize, MAX_Buffer);
        if ActSize <= FSize then
        BufferSize := MAX_Buffer else
        BufferSize := Last;

        c := c + f;

        ProgressBar.Position := Round(c);
        Application.ProcessMessages;

        BlockRead(AFile, Buffer[1], BufferSize);
        MD5Update(Context, @Buffer, BufferSize);
      end;

      end;

    finally
      CloseFile(AFile);
      Panel.Visible := False;
      OKBtn.Enabled := True;
      UserEdit.Enabled := True;
    end;

if CancelProcess then
Result := 'else
begin
  MD5Final(Context, Dig);
  Result := MD5Print(Dig);
end;

end;
end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 18:21
wenn du mit TFileStream arbeitest wird die Datei erst wieder freigegeben wenn du den Stream freigibst.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#9

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 18:30
In diesem Fall allerdings nicht:

Delphi-Quellcode:

////////////////////////////////////////////////////////////////////////////////
// MD5: Erstellt aus einer Datei eine Checksumme
////////////////////////////////////////////////////////////////////////////////

function TMD5Form.FileScan(const FileName: String): String;
const MAX_Buffer = 2048;
var AFile: TFileStream;
var i, ActSize, FSize, BufferSize, Blocks, Last: Integer;
var Buffer: Array[1..MAX_Buffer] of Byte; // Datenpuffer
var Context: MD5Context;
var Dig: MD5Digest;
var f, c: Extended;
begin
c := 0;
ActSize := 0;

if FileExists(FileName) then
begin


AFile := TFileStream.Create(FileName, fmOpenRead or fmShareDenyNone);
try


// Datei konnte geöffnet werden
MD5Init(Context);

      FSize := AFile.Size; // Dateigröße in Byte

      if FSize <> 0 then
      begin
      Panel.Visible := True;
      OKBtn.Enabled := False;
      UserEdit.Enabled := False;

      Blocks := FSize div MAX_Buffer; // Anzahl max. Blöcke
      Last := FSize mod MAX_Buffer; // Größe des Rest-Puffer

      if Last <> 0 then
      inc(Blocks); // sofern, unser Restpuffer ungleich 0 Byte groß ist, wird unsere Blockvariable um 1 erhöht

      f := 100 / Blocks;

      for i := 0 to Blocks -1 do // Blöcke einlesen
      begin

        if CancelProcess then
        Break;

        AFile.Position := ActSize; // Start-Position in Byte (wird von Block zu Block angepasst)

        inc(ActSize, MAX_Buffer);
        if ActSize <= FSize then
        BufferSize := MAX_Buffer else
        BufferSize := Last;

        c := c + f;

        ProgressBar.Position := Round(c);
        Application.ProcessMessages;

        AFile.ReadBuffer(Buffer[1], BufferSize);
        MD5Update(Context, @Buffer, BufferSize);
      end;

      end;



if CancelProcess then
Result := 'else
begin
  MD5Final(Context, Dig);
  Result := MD5Print(Dig);
end;


finally
      AFile.Free;
      Panel.Visible := False;
      OKBtn.Enabled := True;
      UserEdit.Enabled := True;
    end;
end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: FileClose und CloseFile schliesst Datei nicht?

  Alt 28. Jul 2005, 18:33
Das kann nicht sein. Entweder wird der Code nie aufgerufen oder in deinem MD5 Code wird die Datei noch mal geöffnet und nicht wieder geschlossen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:06 Uhr.
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