[c#.net] File.copy en probleem met GetLastWriteTimeUtc

Pagina: 1
Acties:

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 13:27
Ik ben bezig met een back-up script dat alleen de gewijzigde bestanden moet kopiëren naar een netwerk schijf.

Om nou te kijken of een bestand gewijzigd is, kijk ik naar de File.GetLastWriteTimeUtc. Als dit verschilt tussen de bestanden lokaal en remote, dan kopieer ik het bestand.
Na het kopiëren zet ik dan in het remote bestand File.SetLastWriteTimeUtc. Hier krijg ik geen fouten of zo op.

Maar als ik vervolgens mijn script nog een keer draai, worden sommige binaire bestanden als gewijzigd gezien en andere juist niet :? Tekst bestanden gaan overigens wel goed.

Hiermee kijk ik of de tijd verschillend is:
C#:
1
2
3
4
private bool SimilarDate()
{
    return File.GetLastWriteTimeUtc(this.f1).Equals(File.GetLastWriteTimeUtc(this.f2));
}


Het kopieer stuk:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void Copy()
        {
            bool success = false;
            try
            {
                File.Copy(this.f1, this.f2, true);
                success = true;
            }
            finally
            {
                if (success)
                {
                    File.SetLastWriteTimeUtc(this.f2, File.GetLastWriteTimeUtc(this.f1));
                    File.SetCreationTime(this.f1, File.GetCreationTime(this.f1));
                }
            }
        }


Als ik na het kopiëren in die doel map kijk, zijn de lastwritetimes wel hetzelfde. Heeft iemand enig idee waarom dit niet goed gaat?

LinkedIn - Collega worden?


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

C#:
1
File.SetCreationTime(this.f2, File.GetCreationTime(this.f1)); 


f1 en f2 verkeerd?

Skill is when luck becomes a habit.


  • Evilbee
  • Registratie: November 2002
  • Laatst online: 13:27
Oh, typ foutje. Maar hij kijkt naar de LastWriteTimeUtc niet naar de CreationTime.

Maar ook nadat aangepast te hebben pakt ie sommige bestanden wel en andere niet :s

code:
1
2
3
4
5
6
7
8
\My Pictures\Phone\SP_A0037.jpg  changed
\My Pictures\Phone\SP_A0039.jpg  changed
\My Pictures\Phone\SP_A0040.jpg  changed
\My Pictures\Phone\SP_A0041.jpg  changed
\My Pictures\Phone\SP_A0042.jpg  similar
\My Pictures\Phone\SP_A0043.jpg  similar
\My Pictures\Phone\SP_A0044.jpg  similar
\My Pictures\Phone\SP_A0045.jpg  similar

LinkedIn - Collega worden?


  • Evilbee
  • Registratie: November 2002
  • Laatst online: 13:27
Ik snap het niet. Als ik dit er van maak gaat het wel goed.
C#:
1
2
3
4
private bool SimilarDate()
{
    return File.GetLastWriteTimeUtc(this.f1).ToString().Equals(File.GetLastWriteTimeUtc(this.f2).ToString());
}

LinkedIn - Collega worden?


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Volgens mij is het dan niet meer precies genoeg. Zou je trouwens niet iets kunnen doen in de trand van een md5 sum en dat gaan vergelijken?

Zou het niet kunnen dat je setcreationtime je writetime veranderd? Dan zit er een paar miliseconden verschil tussen. Draai die twee eens om?

[ Voor 34% gewijzigd door eek op 28-01-2007 12:38 ]

Skill is when luck becomes a habit.


  • Evilbee
  • Registratie: November 2002
  • Laatst online: 13:27
Het nadeel van die md5-sum, is dat het veel trager is.

Ik heb nu 500 miliseconden tussen copy en SetLastWriteTimeUtc en tussen SetLastWriteTimeUtc en SetCreationTime. Maar hij geeft nog steeds aan dat het verschillend is.

LinkedIn - Collega worden?


  • eek
  • Registratie: Februari 2001
  • Laatst online: 06-04-2020

eek

@MagickNET

Doe eens eerst SetCreationTime zoals ik al eerder zei? Of hielp dat niet?

[ Voor 4% gewijzigd door eek op 28-01-2007 12:56 ]

Skill is when luck becomes a habit.


  • Evilbee
  • Registratie: November 2002
  • Laatst online: 13:27
Heb ik geprobeerd, maar dat hielp dus niet.

Die md5-sum werkt wel goed, alleen dat is zo ontzettend traag.

LinkedIn - Collega worden?


  • Evilbee
  • Registratie: November 2002
  • Laatst online: 13:27
Ik denk dat ik het probleem heb gevonden, als ik een map backup naar mijn lokale harde schijf gaat het wel goed :s Ook zonder de de sleep's er tussen.

Dus ik denk dat het ligt aan de tijd op mijn remote systeem.

LinkedIn - Collega worden?


  • elmer25
  • Registratie: Februari 2002
  • Laatst online: 01-12-2021

elmer25

ooit was ik 25

Het probleem is dat je Object1.Equals(Object2) gebruikt. Dit geeft alleen True terug als Object1 en Object2 hetzelfde object zijn (referentie van elkaar). Gebruik ipv .Equals gewoon een == in je code en het zal wel werken zoals je verwacht.

  • Evilbee
  • Registratie: November 2002
  • Laatst online: 13:27
Ik heb het probleem gevonden. De datum mag dan wel gelijk zijn, maar het aantal ticks niet. En daar wordt op vergeleken met .equals of ==.

Als ik het bestand had gekopieerd en SetLastWriteTimeUtc had uitgevoerd. Waren de ticks verschillend.
code:
1
2
Oorspronkelijke bestand:        633047428508281250
Gekopieerde bestand op netwerk: 633047428510000000


Die van het oorspronkelijke bestand waren nanoseconden en bij het setten kunnen er schijnbaar alleen seconden worden ingezet waardoor er wordt afgerond. Dus als je bijde ticks deelt door 10000000 en dan afrond komt het wel goed.

LinkedIn - Collega worden?

Pagina: 1