Directory.Exist non funziona su tutti i pc?

di il
18 risposte

Directory.Exist non funziona su tutti i pc?

Salve a tutti, chiedo aiuto per una cosa che prima non avevo mai notato, ho necessità di controllare la presenza di una cartella e se non esiste, crearla.
Nulla di difficile, solo che il programma non funziona su tutti i pc, premetto che i pc hanno lo stesso O.S. e aggiornato alla stessa versione.
Il codice da me usato è:

If My.Computer.FileSystem.DirectoryExists(Path.Combine(Environment.SpecialFolder.MyDocuments, "CARTELLA")) = False Then
MkDir(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\CARTELLA\")

ho provato ad usare il path.combine anche nella creazione del file ma nulla, su un pc va e nell'altro non fa il controllo se esiste o meno?

Cosa posso controllare?

Grazie a tutti

18 Risposte

  • Re: Directory.Exist non funziona su tutti i pc?

    orione1976 ha scritto:


    ...
    su un pc va e nell'altro non fa il controllo se esiste o meno?

    Cosa posso controllare?
    potrebbe essere un problema di permessi che si manifesta o meno a seconda dell'utente che esegue il porgramma ?

    https://www.codeproject.com/Questions/55409/Directory-Exists-and-Access-Permissions
  • Re: Directory.Exist non funziona su tutti i pc?

    Ciao grazie per il suggerimento, non credo sia un problema di autorizzazioni, o almeno credo, sono programmi che hanno sempre funzionato. il creadirectory ad esempio o mk non funziona se punto la cartella documenti, utilizzando ovviamente la sintassi corretta, ma se punto il disco c:\ invece funziona. Come può essere questa cosa? Ho solo riaperto il programma per fare un'aggiunta nel pulsante "upgrade", quindi nessuna modifica al codice, in ogni programma fa così. Un suggerimento? Può essere qualche casino nel software vb.net? uso vb2010 e anche vb2017 stesso problema.
    Ho provato 2 pc diversi e una macchina virtuale, niente, ho eliminato il file exe, ricompilato ma niente. e se un upgrade di Windows avesse creato questo?
  • Re: Directory.Exist non funziona su tutti i pc?

    Niente, si ostina a non funzionare, su un computer va e in altri no, eppure non faccio nulla di strano.

    Private Sub BTNcrea_Click(sender As System.Object, e As System.EventArgs) Handles BTNcrea.Click
    If My.Computer.FileSystem.DirectoryExists(Path.Combine(Environment.SpecialFolder.MyDocuments, "CARTELLA")) = False Then
    My.Computer.FileSystem.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\CARTELLA\")
    EndIf

    niente, non crea nemmeno la cartella

    boh? Qualche suggerimento?
  • Re: Directory.Exist non funziona su tutti i pc?

    Prova a scrivere così
            Dim mydir As String = Path.Combine(Environment.SpecialFolder.MyDocuments), "CARTELLA")
            MessageBox.Show(mydir)
    cosa ottieni ?
  • Re: Directory.Exist non funziona su tutti i pc?

    orione1976 ha scritto:


    Niente, si ostina a non funzionare, su un computer va e in altri no, eppure non faccio nulla di strano.

    Private Sub BTNcrea_Click(sender As System.Object, e As System.EventArgs) Handles BTNcrea.Click
    If My.Computer.FileSystem.DirectoryExists(Path.Combine(Environment.SpecialFolder.MyDocuments, "CARTELLA")) = False Then
    My.Computer.FileSystem.CreateDirectory(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\CARTELLA\")
    EndIf

    niente, non crea nemmeno la cartella

    boh? Qualche suggerimento?
    aspe.... ora che ci faccio caso meglio mi sembra di vedere qualcosa di strano
    nella if usi :
    Path.Combine(Environment.SpecialFolder.MyDocuments, "CARTELLA")) = False Then

    e per creare la directory invece usi
    Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) & "\CARTELLA\"

    che sono directory diverse.

    Prova scrivendo:
    
            Dim sDir As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "CARTELLA")
    
            If My.Computer.FileSystem.DirectoryExists(sDir) = False Then
                My.Computer.FileSystem.CreateDirectory(sDir)
            End If
    
    ... anzi potresti anche togliere la verifica preventiva dell'esistenza
    (https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualbasic.fileio.filesystem.createdirectory?view=netframework-4.7.2)
    e scrivere direttamente
    
            Dim sDir As String = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "CARTELLA")
             My.Computer.FileSystem.CreateDirectory(sDir)
    
  • Re: Directory.Exist non funziona su tutti i pc?

    Grazie per il suggerimento, avevo provato lo stesso comando anche nella verifica, ho provato anche solo a creare la cartella ma dice "eccezione non gestita da system.io f:\documenti\CARTELLA file non trovato"
    Perchè dice non trovato anche se levo il codice exist? Dovrebbe crearlo e basta no?

    Boh devo indagare magari la colpa non è di Vb.net ma di qualcosa nel pc a questo punto... su c:\ ad esempio scrive...
  • Re: Directory.Exist non funziona su tutti i pc?

    Potresti avere delle indicazioni dal tipo di ecccezione sollevata;
    intendo dire è una excption di tipo IOException , UnauthorizedAccessException o cosa
  • Re: Directory.Exist non funziona su tutti i pc?

    Proviamo a chiarire lo scenario :
    hai un computer su cui tutto và come deve?
    se si è il computer su cui esegui il programma da visual studio?
    sui computer dove non funziona hai portato il programma tramite installer ?
    hai provato a passare un path fisso per i documenti tipo "C:\Users\NomeUtente\Documents" ? funziona su tutti?
    hai eseguito i programmi come Admin premendo tasto destro "Esegui come Amministratore"? funziona su ogni pc?
    metti il tuo codice dentro un try catch e dentro il catch invia a monitor con messagebox l'eventuale eccezione
  • Re: Directory.Exist non funziona su tutti i pc?

    Ok allora la situazione riassuntiva è questa:

    ho un pc fisso e dun portatile.
    Pc portatile, tutto ok, funziona da Vb.net sia 2010 che 2017 ed ho provato anche copianto il file exe nel desktop... tutto ok
    pc fisso, improvvisamente non crea le cartelle e non verifica in "documenti", ne in debug ne se copio il file exe nel desktop, provo anche puntando direttamente la cartella documenti da percorso e non va, se creo cartellle e file in documenti con il tasto destro come sempre, funziona quindi posso farlo come utente.
    Ho provato a farlo come administrator ma niente
    l'errore che da è questo

    System.IO.FileNotFoundException: 'Il file 'F:\Documenti\Cartella' non è stato trovato.'

    ma perchè dice non trovato? ho messo un bottone con il codice seguente e basta, perchè dice non trovato?

    My.Computer.FileSystem.CreateDirectory("F:\Documenti\Cartella")

    Ho provato su tutti i dischi c:\ d:\ e:\ e nelle cartelle va, ma nelle "specialFolder" no.
    a questo punto penso non sia un problema di vb? però solo con le special folder... documenti, musica, video etc...
  • Re: Directory.Exist non funziona su tutti i pc?

    >>>My.Computer.FileSystem.CreateDirectory("F:\Documenti\Cartella")
    ma F:\Documenti esiste già?
    hai guardato a runtime quanto vale "Environment.SpecialFolder.MyDocuments"?
  • Re: Directory.Exist non funziona su tutti i pc?

    Si certo, la cartella F:\Documenti esiste è la mia cartella normale "Documenti" nella quale posso scrivere tranquillamente... ce l'ho su un disco diverso da C: perchè il primario è un ssd ma non penso sia un problema ha sempre funzionato.
    Perchè secondo voi fa questo controllo?

    Ho fatto un controllo di questo tipo.
    dim percorso as string
    percorso = tutto il percorso in documenti
    MsgBox(percorso)
    e mi da corretto ovvero F:\Documenti
  • Re: Directory.Exist non funziona su tutti i pc?


    Cattura.JPG
    Cattura.JPG

    Anche io ho la cartella documenti in F: però devi dirglielo al sistema che quella è la tua cartella documenti di default in modo da includerla in special folders. Allego la schermata di esplorer su win10, se clicchi su documenti vedi la tua cartella F:\Documenti ?
  • Re: Directory.Exist non funziona su tutti i pc?

    Inoltre come hai impostato in Windows Defender Security Center
    l' Accesso alle cartelle controllato ?
    ... eventualmente disattivalo temporaneamente
    o aggiungi devenv.exe e msbuild.exe

    HTH
  • Re: Directory.Exist non funziona su tutti i pc?

    Ok forse non è un problema di vb a questo punto, ho provato a spostare la cartella documenti resettandola nella posizione predefinita e funziona, se le cambio il disco no. Ora mi domando, ma la special folder non segue in base al disco? ora verifico con una macchina virtuale se è così o meno... boh ha sempre funzionato, adesso nn va, quindi l'errore non era sulla cartella non creata ma in quella "documenti" che non rileva, il codice funziona... speriamo di uscirne, perchè non vorrei che in altre macchine poi mi fa questa cosa.

    Ho verificato i percorsi come detto sopra ovviamente ed è tutto ok.
Devi accedere o registrarti per scrivere nel forum
18 risposte