2012-12-27 2 views
0

Ok mon problème est, quand j'essaye d'accéder à un fichier pendant que le nom de fichier du chemin provient d'un DataTable il ne trouve pas le fichier.C# - Impossible de trouver le fichier quand une partie de la chaîne de chemin de DataTable

je l'ai déjà testé quand je parse le nom de fichier d'un fichier texte ou tout simplement hardcode dans la chaîne ... et bien sûr ce travail> _ <

juste ne pas arriver là où la diff est quand i chaîne le nom du fichier de la DataTable.

La chaîne il construire ressembler à ceci:

C: \ system Server \/somefile.dat

Voici le code:

string accountConnectionString = ConfigurationManager.ConnectionStrings["connstring"].ConnectionString; 

    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     LoadFileChecks(); 
    } 

    public SqlConnection GetAccountConnection() 
    { 
     SqlConnection connection = new SqlConnection(accountConnectionString); 
     connection.Open(); 
     return connection; 
    } 


    public DataTable getFilecheck() 
    { 
     using (var con = GetAccountConnection()) 
     { 
      SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tFilecheck", con); 
      DataTable ds = new DataTable("Filecheck"); 
      da.Fill(ds); 
      con.Close(); 
      return ds; 
     } 
    } 

    public void LoadFileChecks() 
    { 
     DataTable table = getFilecheck(); 
     string localPath = Application.StartupPath; 

     foreach (DataRow row in table.Rows) 
     { 
      string line = row["sFilename"].ToString(); 

      string FilePath = localPath + "\\" + line; 
      if (!File.Exists(FilePath)) 
      { 
       MessageBox.Show("File not found"); 
       continue; 
      } 
     } 

    } 
+0

Au lieu d'essayer manuellement concaténer les chemins et les noms de fichiers et munge les doubles barres obliques, rechercher la méthode [Path.Combine] (http: // msdn .microsoft.com/fr-fr/library/fyy7a5kt (v = vs.110) .aspx), qui fait le gros du travail pour vous. –

+0

OK essayé cela, la chaîne ressemble à ça maintenant: "C: \\ Server \\ système \ somefile.dat" mais ne peut toujours pas trouver le fichier: < – Saschanski

Répondre

0

Tout d'abord, Application.StartupPath est dépend comment vous déployez l'application exe.

string localPath = Application.StartupPath; 

sera le chemin d'exécution en cours lors de débogage (par exemple. Projet \ bin \ Debug)

Deuxièmement, vous n'avez pas besoin échapper à tous les anti-slash avec \\

pour l'échantillon, au lieu de ..

string path = "C:\\Server\\system"; 

essayer chaîne d'échappement avec @

string path = @"C:\Server\system"; 

puis Path.Combine avec le nom de fichier

string fileName = row["sFilename"].ToString(); 
string filePath = Path.Combine(path, fileName); 
//Path.Combine(@"C:\Server\system", "somefile.dat"); 
+0

le chemin local est le "C: \\ Server" et il obtient "système \ somefile.dat "du datatable. La chaîne qu'il construit est "C: \\ Server \\ system \\ somefile.dat", ce qui me convient, mais ça ne marchera pas ... cela n'arrive que lorsque j'obtiens le chemin du fichier de la base de données> _ < gettin à partir de textfile ou de travail de code dur bien .. – Saschanski

0

Est-ce une application web .net? Si oui, vous devez changer le chemin vers le chemin du serveur en utilisant

path = Server.MapPath(path); 
+0

nah celui-ci est winforms, et il construit la chaîne droite .. juste ne peux pas voir le fichier en quelque sorte – Saschanski

Questions connexes