2009-08-12 3 views
36

Я просто хочу написать содержимое элемента управления TextBox в файл в корне каталога веб-сервера ... как его указать?Запись файла на веб-сервер - ASP.NET

Помните, я тестирую это локально ... он продолжает записывать файл в мои файлы программ \ visual studio \ Common \ IDE, а не в каталог моего проекта (где я предполагаю, что root - это когда веб-сайт сервер отключается).

Имеет ли моя проблема какое-то отношение к указанию правильного местоположения в моем web.config? Я попробовал, что и до сих пор нет идти ...

Благодаря много ...

 
protected void TestSubmit_ServerClick(object sender, EventArgs e) 
    { 
     StreamWriter _testData = new StreamWriter("data.txt", true); 
     _testData.WriteLine(TextBox1.Text); // Write the file. 
     _testData.Close(); // Close the instance of StreamWriter. 
     _testData.Dispose(); // Dispose from memory.  
    }
+6

Если это более простой тестовый проект, * никогда не сохраняйте его в корне каталога вашего веб-сервера. Используйте временную папку, недоступную для всего мира, иначе пользователи могут размещать произвольный контент на вашем сервере. –

ответ

68
protected void TestSubmit_ServerClick(object sender, EventArgs e) 
{ 
    using (StreamWriter _testData = new StreamWriter(Server.MapPath("~/data.txt"), true)) 
{ 
    _testData.WriteLine(TextBox1.Text); // Write the file. 
}   
} 

Server.MapPath принимает виртуальный путь и возвращает абсолютный. «~» используется для разрешения root приложения.

+1

Как упоминалось в @SpencerRuport, не рекомендуется устанавливать права на запись в корневой каталог. Лучше, например, создать новую папку с разрешением на запись и использовать ее для всех ваших выходов. – prespic

16
protected void TestSubmit_ServerClick(object sender, EventArgs e) 
{ 
    using (StreamWriter w = new StreamWriter(Server.MapPath("~/data.txt"), true)) 
    { 
     w.WriteLine(TextBox1.Text); // Write the text 
    } 
} 
+15

Обратите внимание, что Server.MapPath является 'System.Web.HttpContext.Current.Server.MapPath', если вы пишете код в коде. – styfle

8

Имейте в виду, что при отправке на веб-сервер вам также необходимо предоставить доступ к учетной записи учетной записи IUSR для папки.

Лично я рекомендую не разрешать доступ на запись в корневую папку, если у вас нет веских оснований для этого. И тогда вам нужно быть осторожным, какие файлы вы позволяете сохранять, поэтому вы не можете непреднамеренно разрешить кому-либо писать свои собственные ASPX-страницы.

27

Есть методы, такие как WriteAllText в классе File для общих операций с файлами.

Используйте метод MapPath, чтобы получить физический путь к файлу в своем веб-приложении.

File.WriteAllText(Server.MapPath("~/data.txt"), TextBox1.Text); 
+1

не знаю, почему это больше не поддерживается –

Смежные вопросы