2009-06-17 21 views
10

Sto utilizzando una libreria FTPClient per trasferire file da una condivisione Windows a un server FTP.Accesso ai file negato

Il metodo SendFile della biblioteca utilizza il seguente codice:

FileStream stream = new FileStream(localFileName, FileMode.Open); 

Questo si traduce in uno System.UnauthorizedAccessException di essere gettati, ma io sono in grado di aprire, rinominare e spostare il file utilizzando Windows Explorer sotto il stesso account utente in cui viene eseguito il codice.

Qualcuno può dirmi perché questo sta accadendo?

Edit:

La cosa strana è che posso accedere ad altri file sulla condivisione che sono state concesse le stesse autorizzazioni NTFS come quello che non posso.

Questa è anche un'app di Windows Form.

Aggiornamento:

Ancora nessuna fortuna con questo. Sono in grado di leggere il file utilizzando un StreamReader ma non un flusso di file. Non riesco a capire perché i due si comportano diversamente.

+0

sta chiamando questo da un app 'su Windows Form', o di una pagina ASP.NET? – russau

+0

da un'app di Windows Form –

+1

ogni volta che si esegue l'app dalla condivisione? so. net (per impostazione predefinita) riduce le autorizzazioni dell'app quando lo fai. – russau

risposta

0

permessi 1) NTFS sulla directory fisica utilizzando Explorer

2) All'interno del sito IIS MMC console FTP per consentire lettura/scrittura sulla cartella FTP

3) Assicurarsi che il sito FTP o directory virtuale in realtà esiste, quando si controlla il passaggio precedente

http://www.eggheadcafe.com/forumarchives/inetserveriisftp/Jan2006/post25322215.asp

+0

Credo che stia succedendo l'errore aprendo il file prima che venga inviato? I permessi del sito FTP non sarebbero un fattore a questo punto. – russau

1

il processo che esegue il codice non ha permessi sul file. Fa parte di un'applicazione Web - in tal caso è necessario consentire l'accesso all'account ASPNET.

Concedere l'autorizzazione a "tutti" sul file e vedere se ha ancora problemi.

0

Il progetto viene eseguito da un'unità di rete? Se è così, ciò significa che viene eseguito in una modalità di privilegi limitati che potrebbe causare questo. Prova a copiare il progetto sul tuo drive C ed eseguilo di nuovo.

+0

No, lo sto eseguendo in modalità debug da Visual Studio dalla directory dei progetti locali predefinita. Sto provando ad accedere al file tramite il suo percorso UNC, ad es. \\ server \ share \ file ma fino a quando dispongo delle autorizzazioni corrette (ho accesso completo) che non dovrebbe essere un problema giusto? –

27

Sei sicuro che sia lo stesso account utente? Puoi provare qualcosa di simile

MessageBox.Show(WindowsIdentity.GetCurrent().Name); 

?

Inoltre, sei sicuro che il file non sia di sola lettura? Hai bisogno di accedere in scrittura al file? In caso contrario si potrebbe provare:

FileStream stream = new FileStream(localFileName, FileMode.Open, FileAccess.Read); 
+0

Sì stesso account. –

+12

Grazie per la risposta. Il mio file era di sola lettura ma, poiché non stavo richiedendo l'accesso in scrittura, presupponevo che la definizione di FileAccess.Read non fosse necessaria. Mi sbagliavo. L'aggiunta di FileAccess.Read era la chiave. –

0

E 'nei pressi di classe FileSecurity.

vediamo al FileSecurity class

e cercare:

 // Get a FileSecurity object that represents the 
     // current security settings. 
     FileSecurity fSecurity = File.GetAccessControl(localFileName); 

     // Add the FileSystemAccessRule to the security settings. 
     fSecurity.AddAccessRule(new FileSystemAccessRule("DOMAIN\USERNAME", 
      FileSystemRights.ReadData, AccessControlType.Allow)); 

     // Set the new access settings. 
     File.SetAccessControl(localFileName, fSecurity); 
+0

Che risulta in: Eccezione non gestita: System.Security.Principal.IdentityNotMappedException: Alcuni o tutti i riferimenti di identità non possono essere tradotti. Ci sono trust di dominio coinvolti in questa configurazione, ad esempio io sono un membro di un gruppo in un altro dominio a cui è concesso l'accesso a questo file, mi chiedo se questo abbia un impatto su questo. –

+0

Hai modificato la stringa "DOMAIN \ USERNAME"? – Chernikov

+0

oops ho fatto ma ho dimenticato di uscire dalla "\", ora funzionava bene ma non riesco ancora ad accedere al file. –