Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    [C#]lettura file in rete locale

    Ciao a tutti.
    Ho sviluppato un programma in c# che ho installato su un server. Per l'esecuzione mi collego da due client ognuno dei quali ha sul proprio disco C un file di configurazione (.ini) . Se installo localmente sui due client il programma, tutto funziona. Se invece installo sul server il programma, e lo richiamo dai client, non riesco ad aprire il file ini sul client : quando controllo se il file esiste (facendo System.IO.File.Exists(NomeFile) ) mi restituisce false. Qualcuno può aiutarmi? Grazie

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    In nomefile c'è il path di rete del file o il path locale? le due macchine possono accedere ai dischi senza eventuale autenticazione?

  3. #3
    In nomefile c'è il path di rete del file o il path locale?
    In NomeFile ho provato sia così:
    C:\cartella\file.ini
    che così:
    \\NOME_CLIENT\C\cartella\file.ini
    che così (in questo caso cercando il file sul server):
    \\NOME_SERVER\C\cartella\file.ini

    In tutti e tre i casi, immettendo questi Path in esplora risorse, mi riesce ad aprire il file. il problema è quando lo faccio dal programma installato sul server, ma fatto andare sul client.

    le due macchine possono accedere ai dischi senza eventuale autenticazione?
    Penso di sì: attraverso esplora risorse si riesce benissimo!

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    Il punto è che normalmente da rete si accede tramite una cartella condivisa o una condivisione generica..

    Per esempio esiste di default il "c$" per il disco c:

    Se in esplora risorse funziona non è detto che vada da codice..

  5. #5
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da anatasio
    In NomeFile ho provato sia così:
    C:\cartella\file.ini
    che così:
    \\NOME_CLIENT\C\cartella\file.ini
    che così (in questo caso cercando il file sul server):
    \\NOME_SERVER\C\cartella\file.ini
    Aprire un file in locale è una cosa, aprirlo da remoto è un'altra.

    (1)
    In locale hai i permessi in base alle restrizioni di accesso per lettura/scrittura sulle cartelle, ma hai già le credenziali (visto che hai avuto accesso al computer)
    Da remoto, invece, per default NON hai le credenziali, devi indicarle.

    (2)
    le tue stringhe di accesso sono tutte sbagliate.
    Nel senso che la cartella a cui vuoi accedere DEVE essere condivisa, doppo di che basta indicare il percorso così:

    \\nome_server\\nome_cartella_condivisa\\file.ini

    Nota: nome_cartella_condivisa può NON essere necessariamente il nome della cartella sul server, ma il nome che è stato dato alla condivisione nel momento che la si crea. Esempio, se tu hai

    - Nome del server: \\Server1
    - Percorso della cartella condivisa sul server: D:\Dati\Applicazioni\MioProgramma
    - Nome della cartella condivisa sul server: MioProg

    puoi accedere ad un file (es. config.ini) semplicemente indicando:
    \\Server1\\MioProg\\config.ini
    non occorre conoscere tutto il percorso

    Ma i backslash \ nel codice sono semplici o raddoppiati?

    Ciao

  6. #6
    -ho condiviso la cartella.
    -i backslash \ nel codice sono raddoppiati

    la stringa è quindi:
    "\\\\NOME_SERVER\\nome_cartella_condivisa\\nome_fi le.ini"

    ma l'errore è sempre lo stesso :
    -quando controllo se esiste (facendo System.IO.File.Exists ), mi restituisce false
    -se ignoro questa cosa e provo a leggere ugualmente il file ini, ottengo un errore con messeggio "System.Security.Permissions.SecurityPermissio n"

    Comunque ho provato a copiare l'eseguibile (.exe) sul client. Così funziona tutto alla perfezione: riesce a leggere il file ini sia se questo si trovi sul client sia che si trovi sul server.
    I problemi ci sono quando:
    -l'eseguibile si trova sul server.
    -l'eseguibile viene fatto andare sul client

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Allora probabilmente l'errore è un'altro. perchè a me funziona.
    Mostra il codice che usi.

  8. #8
    Questo è il codice di quando apre il primo Form:

    string PathDelFileIni;
    PathDelFileIni = "\\\\PORTATILEHP6715\\esprit\\Esprit.ini";
    MessageBox.Show(PathDelFileIni);
    ini = new IniIO(PathDelFileIni);

    string sezione = "Connect";
    try
    {
    T_Utente.Text = ini.Read(sezione, "UID");
    T_Password.Text = ini.Read(sezione, "PWD");
    T_Database.Text = ini.Read(sezione, "DATABASE");
    ParametriDatabase.server = ini.Read(sezione, "SERVER");
    ParametriDatabase.dsn = ini.Read(sezione, "DSN");
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }

    E questa è la classe IniIO che utilizza:

    class IniIO
    {
    private string Path;

    [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

    public string Read(string Section, string Key)
    {
    StringBuilder temp = new StringBuilder(255);
    int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.Path);
    return temp.ToString();
    }
    }

  9. #9
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Originariamente inviato da anatasio
    Questo è il codice di quando apre il primo Form:

    string PathDelFileIni;
    PathDelFileIni = "\\\\PORTATILEHP6715\\esprit\\Esprit.ini";
    MessageBox.Show(PathDelFileIni);
    ini = new IniIO(PathDelFileIni);

    string sezione = "Connect";
    try
    {
    T_Utente.Text = ini.Read(sezione, "UID");
    T_Password.Text = ini.Read(sezione, "PWD");
    T_Database.Text = ini.Read(sezione, "DATABASE");
    ParametriDatabase.server = ini.Read(sezione, "SERVER");
    ParametriDatabase.dsn = ini.Read(sezione, "DSN");
    }
    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }

    E questa è la classe IniIO che utilizza:

    class IniIO
    {
    private string Path;

    [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

    public string Read(string Section, string Key)
    {
    StringBuilder temp = new StringBuilder(255);
    int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.Path);
    return temp.ToString();
    }
    }
    - Cos'è sta roba?
    - Ma è completamente diverso da quello che hai affermato negli altri post!!! VVoVe:
    - Dov'è la chiamata a System.IO.File.Exists in cui scrivevi che restituiva False?
    - Dove ti da l'errore ?

    Dai su! Animo!
    Se non dai informazioni corrette e veritiere, poi uno si stanca nel tentare di aiutarti, non trovi?

  10. #10
    scustate !!!
    nel togliere le parti che non centravano con la questione(come i commenti) ho tolto il costruttore della classe.



    class IniIO
    {
    private string Path;

    [DllImport("kernel32")]
    private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
    [DllImport("kernel32")]
    private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

    public IniIO(string path)
    {
    Path = path;
    if (!File.Exists(Path))
    System.Windows.Forms.MessageBox.Show(Path + " NON ESISTE!!!!");
    }

    public string Read(string Section, string Key)
    {
    StringBuilder temp = new StringBuilder(255);
    int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.Path);
    return temp.ToString();
    }
    }




    inoltre servono questi using:
    using System.IO;
    using System.Runtime.InteropServices;
    using System.Text;



    Il punto in cui mi restituisce false è questo:

    if (!File.Exists(Path))
    System.Windows.Forms.MessageBox.Show(Path + " NON ESISTE!!!!");

    e infatti mi esce il message box;

    il punto dove mi da l'errore "System.Security.Permissions.SecurityPermissio n" è dentro al blocco try; quindi viene intercettato e infatti mi esce come message box:


    catch (Exception ex)
    {
    MessageBox.Show(ex.Message);
    }

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 © 2025 vBulletin Solutions, Inc. All rights reserved.