/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Monitere ændring af fil
Fra : Lars Holm Thomsen


Dato : 24-09-04 23:33

Jeg er ved at skrive et program (prgB), som skal reagere på et andet
programs (prgA) kvalitative ændringer i en fil - dvs. at det bare skal
opdage om filen er ændret eller ej!

Dette havde jeg oprindeligt tænkt mig at gøre vha at registrere
ændringer i modificerings tidsstemplet!

Filen åbnes reserveret af prgA (readOnly for alle andre proggrammer), og
nu har det vist sig, at prgA ikke opdaterer filens atributter før
specielle hændelser indtræffer - dvs. at prgA kan ændre i filens indhold
uden at opdatere modificeringsdatoen!

Jeg kan derfor ikke benytte min oprindelige teknik!

Er der bud på den hurtigste metode at afgøre, om en fil er ændret eller
ej - alene på indholdet i filen?

Lars

 
 
Harald (25-09-2004)
Kommentar
Fra : Harald


Dato : 25-09-04 05:37

"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> skrev i en
meddelelse news:pi79l0ta0g7d6jbpgot667pecvcd44pc8j@4ax.com...
> Jeg er ved at skrive et program (prgB), som skal reagere på et andet
> programs (prgA) kvalitative ændringer i en fil - dvs. at det bare skal
> opdage om filen er ændret eller ej!
>
> Dette havde jeg oprindeligt tænkt mig at gøre vha at registrere
> ændringer i modificerings tidsstemplet!
>
> Filen åbnes reserveret af prgA (readOnly for alle andre proggrammer), og
> nu har det vist sig, at prgA ikke opdaterer filens atributter før
> specielle hændelser indtræffer - dvs. at prgA kan ændre i filens indhold
> uden at opdatere modificeringsdatoen!
>
> Jeg kan derfor ikke benytte min oprindelige teknik!
>
> Er der bud på den hurtigste metode at afgøre, om en fil er ændret eller
> ej - alene på indholdet i filen?

Prøv at kikke på FindFirstChangeNotification, WaitForSingleObject osv., det
må vist lige være det der skal bruges.

Mvh
HK



Lars Holm Thomsen (25-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 25-09-04 11:09

On Sat, 25 Sep 2004 06:36:57 +0200, "Harald"
<news10@-REMOVE-THIS-kroning.dk> wrote:


>Prøv at kikke på FindFirstChangeNotification, WaitForSingleObject osv., det
>må vist lige være det der skal bruges.
>
Jeg har prøvet Google, men jeg synes, at det er svært at få overblik!

Har selv tænkt på, om en eller anden Hash- eller CRC-funktion kunne
bruges?
Tror du, at det er noget???

Lars

Harald (25-09-2004)
Kommentar
Fra : Harald


Dato : 25-09-04 18:51

"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> skrev i en
meddelelse news:jqgal0138rbe5go635idhbf8csd5hukjb0@4ax.com...
> On Sat, 25 Sep 2004 06:36:57 +0200, "Harald"
> <news10@-REMOVE-THIS-kroning.dk> wrote:
>
>
>>Prøv at kikke på FindFirstChangeNotification, WaitForSingleObject osv.,
>>det
>>må vist lige være det der skal bruges.
>>
> Jeg har prøvet Google, men jeg synes, at det er svært at få overblik!
>
> Har selv tænkt på, om en eller anden Hash- eller CRC-funktion kunne
> bruges?
> Tror du, at det er noget???

Jeg tror FindFirstChangeNotification er det lettest at bruge da det kun
kræver nogle ganske få liniers kode, det er ikke noget jeg har brugt før men
ud fra hvad jeg har fået at vide og har læst så lyder det meget smart. Jeg
kan prøve at lave et eks. hvis det skal være?

/HK



Lars Holm Thomsen (26-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 26-09-04 11:16

On Sat, 25 Sep 2004 19:50:42 +0200, "Harald"
<news10@-REMOVE-THIS-kroning.dk> wrote:


>Jeg tror FindFirstChangeNotification er det lettest at bruge da det kun
>kræver nogle ganske få liniers kode, det er ikke noget jeg har brugt før men
>ud fra hvad jeg har fået at vide og har læst så lyder det meget smart. Jeg
>kan prøve at lave et eks. hvis det skal være?
>
Det ville være dejligt, hvis du orkede det, for jeg har som sagt ikke
kunnet finde noget, som jeg synes konkret kunne bruges til mit problem!

Lars

Hauge (26-09-2004)
Kommentar
Fra : Hauge


Dato : 26-09-04 15:00

Hejsa

"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> wrote in message
news:7k5dl0tuv31mqp8polg9oj4b2l8ppd48hl@4ax.com...
> Det ville være dejligt, hvis du orkede det, for jeg har som sagt ikke
> kunnet finde noget, som jeg synes konkret kunne bruges til mit problem!

Heller ikke på den link jeg gav dig før? Jeg har da før brugt en unit
derfra, der virkede ganske fint, såeh..

/Hauge



Lars Holm Thomsen (26-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 26-09-04 17:17

On Sun, 26 Sep 2004 16:00:10 +0200, "Hauge" <hauge@CUTsmart-tech.dk>
wrote:

>Hejsa
>
>"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> wrote in message
>news:7k5dl0tuv31mqp8polg9oj4b2l8ppd48hl@4ax.com...
>> Det ville være dejligt, hvis du orkede det, for jeg har som sagt ikke
>> kunnet finde noget, som jeg synes konkret kunne bruges til mit problem!
>
>Heller ikke på den link jeg gav dig før? Jeg har da før brugt en unit
>derfra, der virkede ganske fint, såeh..
>
>/Hauge
>
Jeg var inde på siden, men fandt ikke umiddelbart noget interessant!
Beklager, at jeg ikke fik skrevet svar til dig også - det var en fejl!

Hvad er det du på denne side har brugt?

Lars

Carl Pedersen (27-09-2004)
Kommentar
Fra : Carl Pedersen


Dato : 27-09-04 12:57

http://www.users.on.net/johnson/delphi/dirwatch.html

her finder du en komponet der kan hvad du ønsker
Mvh
Carl



"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> skrev i en
meddelelse news:nnqdl09eosojlodrf4jl6mn24irg5tprl5@4ax.com...
> On Sun, 26 Sep 2004 16:00:10 +0200, "Hauge" <hauge@CUTsmart-tech.dk>
> wrote:
>
>>Hejsa
>>
>>"Lars Holm Thomsen" <aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> wrote in message
>>news:7k5dl0tuv31mqp8polg9oj4b2l8ppd48hl@4ax.com...
>>> Det ville være dejligt, hvis du orkede det, for jeg har som sagt ikke
>>> kunnet finde noget, som jeg synes konkret kunne bruges til mit problem!
>>
>>Heller ikke på den link jeg gav dig før? Jeg har da før brugt en unit
>>derfra, der virkede ganske fint, såeh..
>>
>>/Hauge
>>
> Jeg var inde på siden, men fandt ikke umiddelbart noget interessant!
> Beklager, at jeg ikke fik skrevet svar til dig også - det var en fejl!
>
> Hvad er det du på denne side har brugt?
>
> Lars



Lars Holm Thomsen (27-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 27-09-04 14:11

On Mon, 27 Sep 2004 13:57:28 +0200, "Carl Pedersen"
<cajop_fjernDette@privat.dk> wrote:

>http://www.users.on.net/johnson/delphi/dirwatch.html
>
>her finder du en komponet der kan hvad du ønsker
>Mvh
>Carl

Nej, desværre!

Jeg har været forbi denne side - og mange andre - før!
Problemet er, at komponenten kun reagerer, hvis windows registrerer
ændringer i filen!
Og det specielle ved dette problem er, at programmet laver ændringer i
filen, men ikke rapporterer til windows, at det er sket!

Det lyder mærkeligt, men sådan er det!
Programmet er Outlook Express og filen er indbakke.dbx, og når f.eks. en
mail markeres som læst, bliver ændringen skrevet til indholdet i
"indbakke.dbx", men ændringen bliver først rapporteret til windows, når
man f.eks. bladrer over i "udbakke.dbx".

Rent faktisk har jeg nu stykket en lille funktion sammen, som indirekte
kan det, jeg ønsker! Funktionen laver en CRC-beregning på indholdet i
indbakke.dbx og med en timer sammenlignes variablerne OldCrc med NewCrc
for på den måde at se om Indbakke.dbx har ændret indhold!

Den er ikke skudsikker, for Crc-værdien ændrer sig også, hvis man f.eks.
går fra indbakke til udbakke og tilbage til indbakke uden at lave
ændringer, men dette er ligegyldigt til mit behov

Men tak for hjælp og inspiration til Jer alle!

Lars


Her er funktionen - dårligt dokumenteret og alt det, men den virker
fint!:

function CalcCrCOfFile(FileName:String):string;
type
{$IFDEF VER130} // This is a bit awkward
// 8-byte integer
TInteger8 = Int64; // Delphi 5
{$ELSE}
{$IFDEF VER120}
TInteger8 = Int64; // Delphi 4
{$ELSE}
TInteger8 = COMP; // Delphi 2 or 3
{$ENDIF}
{$ENDIF}
const
Table: array[0..255] of DWORD =
($00000000, $77073096, $EE0E612C, $990951BA,
$076DC419, $706AF48F, $E963A535, $9E6495A3,
$0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
$09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
$1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
$1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
$136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
$14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
$3B6E20C8, $4C69105E, $D56041E4, $A2677172,
$3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
$35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
$32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
$26D930AC, $51DE003A, $C8D75180, $BFD06116,
$21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
$2802B89E, $5F058808, $C60CD9B2, $B10BE924,
$2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,
$76DC4190, $01DB7106, $98D220BC, $EFD5102A,
$71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
$7807C9A2, $0F00F934, $9609A88E, $E10E9818,
$7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
$6B6B51F4, $1C6C6162, $856530D8, $F262004E,
$6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
$65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
$62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
$4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
$4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
$4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
$44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
$5005713C, $270241AA, $BE0B1010, $C90C2086,
$5768B525, $206F85B3, $B966D409, $CE61E49F,
$5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
$59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,
$EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
$EAD54739, $9DD277AF, $04DB2615, $73DC1683,
$E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
$E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
$F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
$F762575D, $806567CB, $196C3671, $6E6B06E7,
$FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
$F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
$D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
$D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
$D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
$DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
$CB61B38C, $BC66831A, $256FD2A0, $5268E236,
$CC0C7795, $BB0B4703, $220216B9, $5505262F,
$C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
$C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,
$9B64C2B0, $EC63F226, $756AA39C, $026D930A,
$9C0906A9, $EB0E363F, $72076785, $05005713,
$95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
$92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
$86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
$81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
$88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
$8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
$A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
$A7672661, $D06016F7, $4969474D, $3E6E77DB,
$AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
$A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
$BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
$BAD03605, $CDD70693, $54DE5729, $23D967BF,
$B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
$B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);
var
Stream:TFileStream;
CRC32: DWORD;
procedure CalcCRC32(p: Pointer; ByteCount: DWORD; var CRCValue:
DWORD);
// The following is a little cryptic (but executes very quickly).
// The algorithm is as follows:
// 1. exclusive-or the input byte with the low-order byte of
// the CRC register to get an INDEX
// 2. shift the CRC register eight bits to the right
// 3. exclusive-or the CRC register with the contents of
Table[INDEX]
// 4. repeat steps 1 through 3 for all bytes
var
i: DWORD;
q: ^BYTE;
begin
q := p;
for i := 0 to ByteCount - 1 do
begin
CRCvalue := (CRCvalue shr 8) xor
Table[q^ xor (CRCvalue and $000000FF)];
Inc(q)
end
end {CalcCRC32};
function CalcStringCRC32(s: string; out CRC32: DWORD): Boolean;
var
CRC32Table: DWORD;
begin
// Verify the table used to compute the CRCs has not been
modified.
// Thanks to Gary Williams for this suggestion, Jan. 2003.
CRC32Table := $FFFFFFFF;
CalcCRC32(Addr(Table[0]), SizeOf(Table), CRC32Table);
CRC32Table := not CRC32Table;

if CRC32Table <> $6FCF9E13 then ShowMessage('CRC32 Table CRC32 is
' +
IntToHex(Crc32Table, 8) +
', expecting $6FCF9E13')
else
begin
CRC32 := $FFFFFFFF; // To match PKZIP
if Length(s) > 0 // Avoid access violation in D4
then CalcCRC32(Addr(s[1]), Length(s), CRC32);
CRC32 := not CRC32; // To match PKZIP
end;
end; {CalcStringCRC32}
function LoadFile(const FileName: TFileName): string;
begin
Stream:=TFileStream.Create(FileName,fmOpenRead or
fmShareDenynone);
with Stream do
begin
try
SetLength(Result, Size);
Read(Pointer(Result)^, Stream.Size);
except
Result := ''; // Deallocates memory
Free;
raise;
end;
Free;
end;
end; {LoadFile}
var crcvalue:cardinal;
totalbytes:comp;
error:word;
Str:String;
begin
CalcStringCRC32(LoadFile(FileName),crc32);
result:=IntToStr(crc32);
end;



Lars Holm Thomsen (28-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 28-09-04 10:32

On Mon, 27 Sep 2004 15:11:19 +0200, Lars Holm Thomsen
<aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> wrote:


>Her er funktionen - dårligt dokumenteret og alt det, men den virker
>fint!:

Ja, og dog! Når den har kørt et stykke tid får jeg en "Out of
memory"-fejl!

Hvor er det lige, at det går galt???

Lars



>
>function CalcCrCOfFile(FileName:String):string;
>type
> {$IFDEF VER130} // This is a bit awkward
> // 8-byte integer
> TInteger8 = Int64; // Delphi 5
> {$ELSE}
> {$IFDEF VER120}
> TInteger8 = Int64; // Delphi 4
> {$ELSE}
> TInteger8 = COMP; // Delphi 2 or 3
> {$ENDIF}
> {$ENDIF}
>const
> Table: array[0..255] of DWORD =
> ($00000000, $77073096, $EE0E612C, $990951BA,
> $076DC419, $706AF48F, $E963A535, $9E6495A3,
> $0EDB8832, $79DCB8A4, $E0D5E91E, $97D2D988,
> $09B64C2B, $7EB17CBD, $E7B82D07, $90BF1D91,
> $1DB71064, $6AB020F2, $F3B97148, $84BE41DE,
> $1ADAD47D, $6DDDE4EB, $F4D4B551, $83D385C7,
> $136C9856, $646BA8C0, $FD62F97A, $8A65C9EC,
> $14015C4F, $63066CD9, $FA0F3D63, $8D080DF5,
> $3B6E20C8, $4C69105E, $D56041E4, $A2677172,
> $3C03E4D1, $4B04D447, $D20D85FD, $A50AB56B,
> $35B5A8FA, $42B2986C, $DBBBC9D6, $ACBCF940,
> $32D86CE3, $45DF5C75, $DCD60DCF, $ABD13D59,
> $26D930AC, $51DE003A, $C8D75180, $BFD06116,
> $21B4F4B5, $56B3C423, $CFBA9599, $B8BDA50F,
> $2802B89E, $5F058808, $C60CD9B2, $B10BE924,
> $2F6F7C87, $58684C11, $C1611DAB, $B6662D3D,
> $76DC4190, $01DB7106, $98D220BC, $EFD5102A,
> $71B18589, $06B6B51F, $9FBFE4A5, $E8B8D433,
> $7807C9A2, $0F00F934, $9609A88E, $E10E9818,
> $7F6A0DBB, $086D3D2D, $91646C97, $E6635C01,
> $6B6B51F4, $1C6C6162, $856530D8, $F262004E,
> $6C0695ED, $1B01A57B, $8208F4C1, $F50FC457,
> $65B0D9C6, $12B7E950, $8BBEB8EA, $FCB9887C,
> $62DD1DDF, $15DA2D49, $8CD37CF3, $FBD44C65,
> $4DB26158, $3AB551CE, $A3BC0074, $D4BB30E2,
> $4ADFA541, $3DD895D7, $A4D1C46D, $D3D6F4FB,
> $4369E96A, $346ED9FC, $AD678846, $DA60B8D0,
> $44042D73, $33031DE5, $AA0A4C5F, $DD0D7CC9,
> $5005713C, $270241AA, $BE0B1010, $C90C2086,
> $5768B525, $206F85B3, $B966D409, $CE61E49F,
> $5EDEF90E, $29D9C998, $B0D09822, $C7D7A8B4,
> $59B33D17, $2EB40D81, $B7BD5C3B, $C0BA6CAD,
> $EDB88320, $9ABFB3B6, $03B6E20C, $74B1D29A,
> $EAD54739, $9DD277AF, $04DB2615, $73DC1683,
> $E3630B12, $94643B84, $0D6D6A3E, $7A6A5AA8,
> $E40ECF0B, $9309FF9D, $0A00AE27, $7D079EB1,
> $F00F9344, $8708A3D2, $1E01F268, $6906C2FE,
> $F762575D, $806567CB, $196C3671, $6E6B06E7,
> $FED41B76, $89D32BE0, $10DA7A5A, $67DD4ACC,
> $F9B9DF6F, $8EBEEFF9, $17B7BE43, $60B08ED5,
> $D6D6A3E8, $A1D1937E, $38D8C2C4, $4FDFF252,
> $D1BB67F1, $A6BC5767, $3FB506DD, $48B2364B,
> $D80D2BDA, $AF0A1B4C, $36034AF6, $41047A60,
> $DF60EFC3, $A867DF55, $316E8EEF, $4669BE79,
> $CB61B38C, $BC66831A, $256FD2A0, $5268E236,
> $CC0C7795, $BB0B4703, $220216B9, $5505262F,
> $C5BA3BBE, $B2BD0B28, $2BB45A92, $5CB36A04,
> $C2D7FFA7, $B5D0CF31, $2CD99E8B, $5BDEAE1D,
> $9B64C2B0, $EC63F226, $756AA39C, $026D930A,
> $9C0906A9, $EB0E363F, $72076785, $05005713,
> $95BF4A82, $E2B87A14, $7BB12BAE, $0CB61B38,
> $92D28E9B, $E5D5BE0D, $7CDCEFB7, $0BDBDF21,
> $86D3D2D4, $F1D4E242, $68DDB3F8, $1FDA836E,
> $81BE16CD, $F6B9265B, $6FB077E1, $18B74777,
> $88085AE6, $FF0F6A70, $66063BCA, $11010B5C,
> $8F659EFF, $F862AE69, $616BFFD3, $166CCF45,
> $A00AE278, $D70DD2EE, $4E048354, $3903B3C2,
> $A7672661, $D06016F7, $4969474D, $3E6E77DB,
> $AED16A4A, $D9D65ADC, $40DF0B66, $37D83BF0,
> $A9BCAE53, $DEBB9EC5, $47B2CF7F, $30B5FFE9,
> $BDBDF21C, $CABAC28A, $53B39330, $24B4A3A6,
> $BAD03605, $CDD70693, $54DE5729, $23D967BF,
> $B3667A2E, $C4614AB8, $5D681B02, $2A6F2B94,
> $B40BBE37, $C30C8EA1, $5A05DF1B, $2D02EF8D);
>var
> Stream:TFileStream;
> CRC32: DWORD;
> procedure CalcCRC32(p: Pointer; ByteCount: DWORD; var CRCValue:
>DWORD);
> // The following is a little cryptic (but executes very quickly).
> // The algorithm is as follows:
> // 1. exclusive-or the input byte with the low-order byte of
> // the CRC register to get an INDEX
> // 2. shift the CRC register eight bits to the right
> // 3. exclusive-or the CRC register with the contents of
>Table[INDEX]
> // 4. repeat steps 1 through 3 for all bytes
> var
> i: DWORD;
> q: ^BYTE;
> begin
> q := p;
> for i := 0 to ByteCount - 1 do
> begin
> CRCvalue := (CRCvalue shr 8) xor
> Table[q^ xor (CRCvalue and $000000FF)];
> Inc(q)
> end
> end {CalcCRC32};
> function CalcStringCRC32(s: string; out CRC32: DWORD): Boolean;
> var
> CRC32Table: DWORD;
> begin
> // Verify the table used to compute the CRCs has not been
>modified.
> // Thanks to Gary Williams for this suggestion, Jan. 2003.
> CRC32Table := $FFFFFFFF;
> CalcCRC32(Addr(Table[0]), SizeOf(Table), CRC32Table);
> CRC32Table := not CRC32Table;
>
> if CRC32Table <> $6FCF9E13 then ShowMessage('CRC32 Table CRC32 is
>' +
> IntToHex(Crc32Table, 8) +
> ', expecting $6FCF9E13')
> else
> begin
> CRC32 := $FFFFFFFF; // To match PKZIP
> if Length(s) > 0 // Avoid access violation in D4
> then CalcCRC32(Addr(s[1]), Length(s), CRC32);
> CRC32 := not CRC32; // To match PKZIP
> end;
> end; {CalcStringCRC32}
> function LoadFile(const FileName: TFileName): string;
> begin
> Stream:=TFileStream.Create(FileName,fmOpenRead or
>fmShareDenynone);
> with Stream do
> begin
> try
> SetLength(Result, Size);
> Read(Pointer(Result)^, Stream.Size);
> except
> Result := ''; // Deallocates memory
> Free;
> raise;
> end;
> Free;
> end;
> end; {LoadFile}
>var crcvalue:cardinal;
> totalbytes:comp;
> error:word;
> Str:String;
>begin
> CalcStringCRC32(LoadFile(FileName),crc32);
> result:=IntToStr(crc32);
>end;
>


Hauge (25-09-2004)
Kommentar
Fra : Hauge


Dato : 25-09-04 11:54

Hejsa
Lars Holm Thomsen wrote:
> Er der bud på den hurtigste metode at afgøre, om en fil er ændret
> eller ej - alene på indholdet i filen?

Kan du evt. bruge noget herfra?

http://www.torry.ru/pages.php?id=252

Mvh Hauge



Lars Holm Thomsen (26-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 26-09-04 23:41

On Sat, 25 Sep 2004 00:32:56 +0200, Lars Holm Thomsen
<aslaktoke-RE-MO-VE-toke@yahoo.NOTdk> wrote:

>Jeg er ved at skrive et program (prgB), som skal reagere på et andet
>programs (prgA) kvalitative ændringer i en fil - dvs. at det bare skal
>opdage om filen er ændret eller ej!
>
>Dette havde jeg oprindeligt tænkt mig at gøre vha at registrere
>ændringer i modificerings tidsstemplet!
>
>Filen åbnes reserveret af prgA (readOnly for alle andre proggrammer), og
>nu har det vist sig, at prgA ikke opdaterer filens atributter før
>specielle hændelser indtræffer - dvs. at prgA kan ændre i filens indhold
>uden at opdatere modificeringsdatoen!
>
>Jeg kan derfor ikke benytte min oprindelige teknik!
>
>Er der bud på den hurtigste metode at afgøre, om en fil er ændret eller
>ej - alene på indholdet i filen?
>
>Lars

Jeg har nu fundet en funktion, som laver en CRC-udregning på filen! Ved
at sammenholde gammel CRC med ny CRC kan jeg se, om filen er ændret,
hvilket virker fint!

Problemet er nu, at det kræver, at filen ikke er låst af PrgA, så får
jeg ikke lov at lave følgende:

memoryStream := TMemoryStream.Create;
memoryStream.LoadFromFile(FormName);

Kan jeg udføre denne streaming i en ReadOnly status, så funktionen kan
læse indholdet uden at konflikte med låsningen??

Lars

Søren Mikkelsen (27-09-2004)
Kommentar
Fra : Søren Mikkelsen


Dato : 27-09-04 15:29

>
> Jeg har nu fundet en funktion, som laver en CRC-udregning på filen! Ved
> at sammenholde gammel CRC med ny CRC kan jeg se, om filen er ændret,
> hvilket virker fint!
>
> Problemet er nu, at det kræver, at filen ikke er låst af PrgA, så får
> jeg ikke lov at lave følgende:
>
> memoryStream := TMemoryStream.Create;
> memoryStream.LoadFromFile(FormName);
>
> Kan jeg udføre denne streaming i en ReadOnly status, så funktionen kan
> læse indholdet uden at konflikte med låsningen??
>
> Lars

Ethvert operativsystem, der tillader deling af filer, følger en semantik for
hvornår ændringer af en fil "offentliggøres" for andre (brugere og
applikationer). Windows følger - såhut jeg visker - en semantik, der
foreskriver at en fil skal lukkes, før ændringerne "træder ikraft".
Det betyder, at du reelt ikke har nogen garanti for, at ændringen er skrevet
til filen, før filen lukkes.

Det bliver nok svært, på en sikker måde, at registrere ændringer, der endnu
ikke er registreret af OS og filsystemet.
Måske du skulle overveje en anden tilgang til problemet. Jeg ville overveje,
om jeg kunne opnå det jeg ville ved at lytte med på kommunikationen mellem
Outlook og serveren. Hvad skal du bruge det til ?

VH Søren






Lars Holm Thomsen (27-09-2004)
Kommentar
Fra : Lars Holm Thomsen


Dato : 27-09-04 17:21

On Mon, 27 Sep 2004 16:29:22 +0200, "Søren Mikkelsen"
<dsl162189@vip.cybercity.rem.dk> wrote:


>Det bliver nok svært, på en sikker måde, at registrere ændringer, der endnu
>ikke er registreret af OS og filsystemet.
>Måske du skulle overveje en anden tilgang til problemet. Jeg ville overveje,
>om jeg kunne opnå det jeg ville ved at lytte med på kommunikationen mellem
>Outlook og serveren. Hvad skal du bruge det til ?
>
Tak for svaret, jeg har dog fundet en husbehovs-løsning (se længere oppe
i tråden!)

Lars

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste