2010-12-03 9 views
0

Je développe une application web C# asp.net. J'en ai fini avec ça, mais j'ai ce petit problème. Je veux enregistrer des fichiers xml dans le dossier "Users" de mon projet, mais si je ne code pas psychiquement le chemin "C: ...... \ Users" dans mon projet, il veut enregistrer le fichier dans ce "C: \ Program Files (x86) \ Fichiers communs \ microsoft partagé \ DevServer \ 10.0 \ Users" dossier, c'est un problème ennuyeux parce que je ne peux pas utiliser le répertoire codé en dur sur notre serveur d'hôtes Web. En outre, j'ai une liste de cases à cocher qui remplit à partir du dossier "DownloadLibrary" dans mon projet, et son suppose de télécharger les fichiers de ce pli, mais aussi en regardant le "C: \ Program Files (x86) \ Fichiers communs \ Microsoft partagé \ DevServer \ 10.0 \ "dossier pour le téléchargement même si son remplissage du dossier correct. Je suis très confus, c'est la première fois que quelque chose comme ça m'est arrivé. Quelqu'un peut-il m'aider s'il vous plaît avec ceci, c'est la seule chose qui se trouve sur mon chemin pour terminer ce projet.Visual Studio 2010 répertoire de travail

+0

Je pense que vous pourriez vouloir physiquement plutôt que psychiquement, ce qui serait une chose particulièrement difficile à faire ... – Paddy

Répondre

1

Vous ne voulez pas du tout utiliser le répertoire de travail; vous souhaitez utiliser un répertoire relatif à l'endroit où l'application Web est situé (qui peut être récupéré à partir HttpRequest.ApplicationPath

HttpRequest request = HttpContext.Current.Request; 
// get the physical path to the web application 
string pathToApp = request.MapPath(request.ApplicationPath); 
string usersPath = System.IO.Path.Combine(pathToApp, "Users"); 

Mise à jour
Comme VincayC rappelle,. développement asp.net n'est pas mon point fort;) le code ci-dessus est essentiellement équivalent de ce (beaucoup plus simple) de code:

string usersPath = HttpRequest.Current.Request.MapPath("~/Users"); 

Si ce code apparaît dans le code-behind d'une page que vous pouvez probablement réduire ainsi HttpContext.Current, depuis que la page a un Request propriété.

+2

+1, mais peut-être plus simple serait request.MapPath ("~/Users")! – VinayC

+0

@VinayC: oui bien sûr! :) –

+0

Merci l'homme c'était une grande aide, bien sûr résolu le problème que j'ai – Madao

0

Cela a résolu le problème que j'ai, mais les téléchargements ne sont toujours pas téléchargés à partir du bon endroit, le programme veut toujours obtenir les fichiers de "C: \ Program Files (x86) \ Fichiers communs \ Microsoft shared \ devserver \ 10.0 \ » répertoire est ici le code que je utilise

--Code pour alimenter le checkbox--

HttpRequest request = HttpContext.Current.Request; 
// get the physical path to the web application 
string appPath = request.MapPath(request.ApplicationPath); 
string directory = System.IO.Path.Combine(appPath, "DownloadLibrary/"); 

// Get the list of files into the CheckBoxList 
var dirInfo = new DirectoryInfo(directory); 

cblFiles.DataSource = dirInfo.GetFiles(); 
cblFiles.DataBind();

--Présentation Bouton Code--

// Tell the browser we're sending a ZIP file! 
      var downloadFileName = string.Format("Items-{0}.zip", DateTime.Now.ToString("yyyy-MM-dd-HH_mm_ss")); 
      Response.ContentType = "application/zip"; 
      Response.AddHeader("Content-Disposition", "filename=" + downloadFileName);

// Zip the contents of the selected files using (var zip = new ZipFile()) { // Add the password protection, if specified /*if (!string.IsNullOrEmpty(txtZIPPassword.Text)) { zip.Password = txtZIPPassword.Text; // 'This encryption is weak! Please see http://cheeso.members.winisp.net/DotNetZipHelp/html/24077057-63cb-ac7e-6be5-697fe9ce37d6.htm for more details zip.Encryption = EncryptionAlgorithm.WinZipAes128; }*/ // Construct the contents of the README.txt file that will be included in this ZIP var readMeMessage = string.Format("Your ZIP file {0} contains the following files:{1}{1}", downloadFileName, Environment.NewLine); // Add the checked files to the ZIP foreach (ListItem li in cblFiles.Items) if (li.Selected) { // Record the file that was included in readMeMessage readMeMessage += string.Concat("\t* ", li.Text, Environment.NewLine); // Now add the file to the ZIP (use a value of "" as the second parameter to put the files in the "root" folder) zip.AddFile(li.Value, "Your Files"); } // Add the README.txt file to the ZIP //zip.AddEntry("README.txt", readMeMessage, Encoding.ASCII); // Send the contents of the ZIP back to the output stream zip.Save(Response.OutputStream);</pre></code>

Je Je ne sais pas comment faire pour que les téléchargements pointent vers le répertoire de mon application, J'ai essayé tout ce que je pouvais penser.