Voglio scrivere un test unitario per verificare che due percorsi file siano equivalenti, ma non voglio assumere che la rappresentazione della stringa sia la stessa.Qual è il modo migliore per determinare che due percorsi di file si riferiscano allo stesso oggetto file?
Ad esempio, su Linux potrebbero esserci dei collegamenti simbolici nel percorso in un caso e non nell'altro. Su Windows, potrebbero essere presenti notazione di unità su uno (X:\foo
) e notazione di rete sull'altro (//serverX/foo
). E il più complicato, il file potrebbe essere stato scritto su Linux su una condivisione NFS (nella sintassi /path/to/file
) e verificato su Windows usando la sintassi DOS (X:\to\file
) dove X:
è un supporto NFS a /path
.
Alcune idee (che si trova qui su Stack Overflow, ma non unificato):
- Su Linux, confrontare l'inode da
stat
- Usa
realpath
(è questa piattaforma indipendente?) - Su Windows , confronta le stringhe su
GetFullPathName
- Su Windows, confronta i numeri di serie e l'indice dei file da
GetFileInformationByHandle
Quale sarebbe la migliore soluzione multipiattaforma? Sto scrivendo questo in C++, ma posso ovviamente passare a C ovviamente.
non è sicuro se si rivolge il vostro problema, ma hai preso uno sguardo al boost :: filesystem? http://www.boost.org/doc/libs/1_57_0/libs/filesystem/doc/index.htm – vsoftco
@JossefHarush che non ti direbbe se stai guardando due diverse copie dello stesso file. –