Remplacement des caractères délimiteurs dans le chemin d'accès au fichier
Je suis en développement C# une application web dans VS 2008. Je laisse à l'utilisateur de sélectionner un fichier d'entrée puis-je stocker le chemin d'accès du fichier dans une variable de chaîne. Cependant, il stocke cette voie comme "C:\\folder\\..."
. Donc ma question est comment puis-je convertir ce fichier chemin d'accès en un seul "\"?
Merci les gars pour toutes votre aide! S'il vous plaît pardonnez-moi comme je suis un débutant de ASP.NET développement. C'est plus de mon code dans le contexte. Je veux d'abord voir si le répertoire existe. Je suppose que je n'ai pas à vérifier si je l'ai vérifier si le fichier existe. Mais ce qui devrait encore fonctionner correctement? Et actuellement, mon "chemin" variable de chaîne n'est pas en montrant la façon dont j'en ai besoin. Je ne suis pas sûr de la façon de formuler cette déclaration. Finalement, je me voulez exécuter la ReadAllText (voir la dernière ligne).
protected void btnAppend_Click(object sender, EventArgs e)
{
string fullpath = Page.Request.PhysicalPath;
string fullPath2 = fullpath.Replace(@"\\", @"\");
if (!Directory.Exists(fullpath2))
{
string msg = "<h1>The upload path doesn't exist: {0}</h1>";
Response.Write(String.Format(msg, fullpath2));
Response.End();
}
string path = "@" + fullpath2 + uploadFile.PostedFile.FileName;
if (File.Exists(path))
{
//Create a file to write to.
try
{
StreamReader sr = new StreamReader(path);
string s = "";
while(sr.Peek() > 0)
s = sr.ReadLine();
sr.Close();
}
catch (IOException exc)
{
Console.WriteLine(exc.Message + "Cannot open file.");
return;
}
}
if (uploadFile.PostedFile.ContentLength > 0)
{
inputfile = System.IO.File.ReadAllText(path);
Bon point, la haute technologie, mais le but de mon application web est pour l'utilisateur d'être en mesure de mapper les colonnes de l'entrée sélectionnée fichier avec des colonnes de la base de données Adventureworks et ajouter ces enregistrements d'entrée de la table sélectionnée. Est-il un moyen plus sûr de faire cela?
OriginalL'auteur salvationishere | 2010-04-14
Vous devez vous connecter pour publier un commentaire.
Pour commencer, appelant
fullpath.Replace()
ne fait rien pourfullpath
; il retourne une nouvelle chaîne. Aussi, lorsque votre littéraux de chaîne ont un \ (barre oblique inverse), vous devez indiquer au compilateur que vous êtes pas essayez d'utiliser une séquence d'échappement:La
@
signifie "s'il vous plaît traiter cette chaîne littérale (mot à mot)". En d'autres termes, "quand je dis que la barre oblique inverse, je dire barre oblique inverse!"Voir http://msdn.microsoft.com/en-us/library/362314fe.aspx.
Edit:
Comme LeBleu mentionné, vous appelez Répertoire.Exists() sur un chemin d'accès complet. Cela ne marchera pas, vous devez extraire le répertoire partie du chemin. Essayez ceci:
Mettre le code que vous utilisez en ce moment dans votre question. Le code dans mon exemple sera certainement convertir double barre oblique inverse à une seule barre oblique inverse.
Charles, je ne suis pas sûr de comprendre votre explication ici. Cependant, j'ai mis à jour ma question peut-être alors vous verrez ce que je suis finalement d'essayer d'atteindre.
Merci pour votre aide, Charles. J'ai résolu mon problème! (voir ci-dessous).
Je ne suis pas sûr de savoir comment vous fixé, parce que le dernier code que vous avez posté est encore pire! Je suppose que vous avez réalisé que vous n'avez pas besoin d'ajouter "@" pour un non-littéral de chaîne. N'utiliser que l' @ truc sur les littéraux de chaîne.
OriginalL'auteur Igby Largeman
Êtes-vous sûr que le problème est que les barres obliques inverses? Antislash est un caractère d'échappement dans les chaînes, de telle sorte que si vous avez ajouté dans une chaîne, vous devez taper "\\" au lieu de "\". (si vous n'utilisez pas @) Note que le débogueur fréquemment affiche la chaîne de la façon dont vous le mettre dans le code, avec les caractères d'échappement, plutôt que directe.
Selon la la documentation, Page.Demande.PhysicalPath retourne le chemin d'accès au fichier spécifique que vous êtes, et non pas le répertoire. Répertoire.Existe n'est vrai que si vous lui donnez un répertoire, pas un fichier. Ne Fichier.Exists() retourne true?
OriginalL'auteur LeBleu
Vous pourriez envisager de le remplacer par le Chemin.DirectorySeparatorChar plutôt que \ sur la possibilité que votre code peut se retrouver en cours d'exécution sur une plate-forme différente (un jour mono.net permet de l'utiliser sur linux ou peut-être plus probable, il pourrait finir sur un peu bizarre plate-forme mobile)
Merci les gars pour toutes votre aide! J'ai résolu mon problème. J'ai tout supprimé le caractère "@" pour que mon fichier de chemin de traiter "\\""\"! Simple, non?
OriginalL'auteur rtpHarry