Visualizzazione dei risultati da 1 a 9 su 9

Discussione: [C#] Confronto path

  1. #1

    [C#] Confronto path

    Ciao a tutti!
    ho i seguenti percorsi in lan:
    1) \\server\CartellaCondivisa001
    2) \\server\c$\folders\Cartella001
    3) \\ip\c$\folders\Cartella001


    Si tratta in realtà della stessa cartella raggiungibile in tre modi diversi. Nel primo caso Cartella001 è condivisa con nome CartellaCondivisa001.
    L'obiettivo è creare un metodo che prenda in input due path e mi dica se puntano alla stessa cartella. Mi sto scontrando con la cartella condivisa...
    Ho i permessi da amministratore, ma non vorrei scrivere all'interno delle cartelle (quindi non posso utilizzare soluzioni tipo: scrivo un file nel path1 e vedo se compare nel path2).
    Avete qualche idea?



    Grazie!
    Luciano
    Ultima modifica di Luciano79; 15-10-2021 a 10:58

  2. #2
    Su linux esiste "stat" che ti fornisce anche l'Inode.

    Credo che qualcosa di simile esista anche in C#, tra le funzioni di controllo del filesystem. In pratica ti fornisce il numero di Inode della partizione (che non varia se viene montata sul pc 1 o sul pc 2...)

  3. #3
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,151
    Quote Originariamente inviata da Dascos Visualizza il messaggio
    Su linux esiste "stat" che ti fornisce anche l'Inode.

    Credo che qualcosa di simile esista anche in C#, tra le funzioni di controllo del filesystem. In pratica ti fornisce il numero di Inode della partizione (che non varia se viene montata sul pc 1 o sul pc 2...)
    Qua non si parla di partizione, ma di share di rete.
    Non penso si possa fare quello che dici, se non facendo delle prove di scrittura e verificando se il file è presente su altre cartelle.

  4. #4
    forse qualche caso lo risolvi con path.getfullpath
    ma dubito fortemente che funzioni sempre

    HTH
    O santo protettore del'informatico quadratico medio , se puoi allontana da me questo cetriolo amaro!
    Programmazione agile ? Guarda che qua già da un pezzo facciamo programmazione acrobatica !

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    23,956
    Quote Originariamente inviata da Luciano79 Visualizza il messaggio
    L'obiettivo è creare un metodo che prenda in input due path e mi dica se puntano alla stessa cartella.
    L'obiettivo è chiaro, ma l'utilità di una simile funzione quale sarebbe?
    In quale scenario dovrebbe servire?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Quote Originariamente inviata da alka Visualizza il messaggio
    L'obiettivo è chiaro, ma l'utilità di una simile funzione quale sarebbe?
    In quale scenario dovrebbe servire?
    Non posso scrivere file in queste cartelle perchè alcune di loro sono soggette a polling da parte di processi a me sconosciuti.


    Ho messo in piedi un servizio di pulizia automatico che consenta di personalizzare la ricerca dei file o delle cartelle da archiviare o eliminare.
    L'input principale è una tabella che contiene l'elenco di tutti i path da monitorare, ognuno con una propria configurazione (regole di archiviazione o pulizia).
    Per ogni path è possibile definire se estendere le regole alle sottocartelle oppure no. E' possibile quindi che un path con regole proprie sia una sottocartella di un altro path con regole diverse.


    Esempio:
    Path1=\\server\folder\Cartella001 (con flagEspandiRegoleASottocartelle=True)
    Path2=\\server\folder\Cartella001\sottocartellaXX\ YYYY (con flagEspandiRegoleASottocartelle=True)


    quando effettuo il parse delle cartelle del server devo essere in grado di capire che \\server\folder\Cartella001\sottocartellaXX\YYYY\Z ZZZ\HHHH deve ereditare le regole di Path2 e non di Path1.
    Per fare questo ho creato un algoritmo in cui mi costruisco l'albero dei path censiti in tabella (un albero per ogni path che non sia una sottocartella di un altro path in tabella).


    Ipotizziamo che \\server\CartellaCondivisa001 sia \\server\folder\Cartella001\sottocartellaXX e che un utente abbia creato delle regole per \\server\CartellaCondivisa001.
    In questo caso devo essere in grado di capire che le regole da applicare siano quelle di Path1.


    Avrei altre strade più complesse, tipo:
    - Su ogni server installo un servizio che prenda in input un path e mi dice se è una share di rete + info varie.
    - Effettuo la ricerca direttamente su ogni server (le ricerche potrebbero essere pesanti, questo allegerirebbe il traffico di rete).


    Ovviamente se riesco a risolverlo con un'unica applicazione e con un piccolo sforzo è meglio.
    Ultima modifica di Luciano79; 18-10-2021 a 16:07

  7. #7
    Quote Originariamente inviata da URANIO Visualizza il messaggio
    Qua non si parla di partizione, ma di share di rete.
    Non penso si possa fare quello che dici, se non facendo delle prove di scrittura e verificando se il file è presente su altre cartelle.
    Tranquillo, si può fare.
    L'ho anche scritto, "non varia se lo monti su pc1, pc2 o pc543764".
    Fai una prova :-D

  8. #8
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,151
    Quote Originariamente inviata da Dascos Visualizza il messaggio
    Tranquillo, si può fare.
    L'ho anche scritto, "non varia se lo monti su pc1, pc2 o pc543764".
    Fai una prova :-D
    No, non hai capito quello che intendo.
    Io posso avere C:\temp e fare due share che puntano alla stessa cartella.
    Lui da remoto vuole capire se le due share puntano alla stessa cartella.

  9. #9
    Quote Originariamente inviata da URANIO Visualizza il messaggio
    No, non hai capito quello che intendo.
    Io posso avere C:\temp e fare due share che puntano alla stessa cartella.
    Lui da remoto vuole capire se le due share puntano alla stessa cartella.
    Eh...in linux il comando stat ti da quelle info. Nello specifico ti fornisce l'Inode, che è identico ovunque tu monti lo share e con qualsiasi nome tu lo monti...
    server condivide la cartella /var/log/apache con nome x.x.x.x:/apache
    pc1 monta su /home/server/apache
    pc2 monta su /home/produzione/logapache

    Se fai lo stat su pc1 ottieni un certo inode (es: 105673423)
    Se lo fai su pc2 ottieni comunque 105673423
    Ovviamente se il check lo devi fare SUL server, cioè capire CHI ha montato "/apache", è un altro discorso più complesso perchè al massimo puoi sapere chi l'ha montato ma non dove.

    Comunque, tornando al problema....da come hai specificato non è chiaro perchè devi verificare se due cartelle montate su percorsi diversi sul client sono la stessa cartella sul server...

    Lasciando perdere come è la logica per pulire/archiviare, tu cosa vuoi fare dove?

    Da dove parte il controllo, dal server principale che verifica sugli altri server^
    Chi ha le cartelle montate?

    Sei in questa situazione?
    Server1 ha una serie di mountpoint locali che arrivano da server2, server3 ecc?
    Server1 fa girare il programma che interroga server2, server3, server4 ecc?

    In pratica, quale server deve fare i controlli e quale server ha montato i percorsi di rete?

    Secondo me, da quel poco che ho capito della tua descrizione parziale, ti stai ponendo un problema inutile...
    Prova a spiegare bene chi fa cosa, partendo appunto da "chi" ha i mount point collegati e da "chi" invece li condivide, da chi fa girare il programmino di pulizia ecc

  10. #10
    Nel frattempo abbiamo avuto conferma direttamente da uno sviluppatore Microsoft Italia il quale, dopo aver effettuato ricerche al suo interno, ha confermato che il framework .net non offre strumenti che possano risolvere questo problema tramite un'unica applicazione. Occorre perforza intervenire anche sui server che si vuole interrogare.
    @Dascos, provo a riassumere la situazione in maniera diversa perche' mi incuriosisce comunque la tua idea.


    - Io non ho alcun controllo su quello che fa l'utente, ne posso indicare linee guida sulla condivisione delle cartelle sui vari server.
    - In una lan ci sono N server.
    - L'applicazione gira con i diritti da amministratore sul server ServerA.
    - L'applicazoine deve effettuare ricerche sul Server1, sul Server2, sul ServerN, sul PcUtente Pc999.
    - Tutti i path da monitorare sono visibili da ServerA.
    - Server2 ha un path condiviso che va monitorato, "\\Server2\e$\Root1", raggiungibile con utente Admin.
    - Un utente in un qualsiasi momento crea la seguente cartella direttamente sul Server2: "\\Server2\e$\Root1\Cliente\XXX". Deve rendere visibile la cartella XXX ad un utente esterno, quindi per motivi di sicurezza la condivide con nome "CartellaCondivisa", raggiungibile tramite "\\Server2\CartellaCondivisa" con l'utente "Guest123".
    - L'utente Guest123 (oppure l'utente Admin) crea la cartella "\\Server2\e$\Root1\Cliente\XXX\YYY".


    Quindi "\\Server2\CartellaCondivisa" e "\\Server2\e$\Root1\Cliente\XXX" sono in realt� la stessa cartella e in entrambi i casi sono sottocartelle di "\\Server2\e$\Root1".
    Allo stesso modo, "\\Server2\CartellaCondivisa\YYY" e "\\Server2\e$\Root1\Cliente\XXX\YYY" sono la stessa cosa e in entrambi i casi sono sottocartelle di "\\Server2\e$\Root1".


    Su tutte le sottocartelle di "\\Server2\e$\Root1" devo essere in grado di compiere delle azioni, tranne che nelle sottocartelle di "\\Server2\CartellaCondivisa", nelle quali devo compiere azioni diverse.
    Ma come faccio a capire che "\\Server2\CartellaCondivisa" e' una sottocartella di "\\Server2\e$\Root1"?
    Se non lo capisco, in "\\Server2\e$\Root1\Cliente\XXX" compio le stesse azioni di "\\Server2\e$\Root1" essendo XXX una sua sottocartella.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.