将数据写入App_Data

时间:2010-04-04 13:54:26

标签: .net asp.net file-io

我想使用以下代码将.xml文件写入App_Data / posts。为什么会导致错误?

代码

 Stream writer  = new FileStream("..'\'App_Data'\'posts'\'" + new Guid(post_ID.ToString()).ToString() + ".xml", FileMode.Create);

3 个答案:

答案 0 :(得分:18)

请发布您获得的例外情况;不只是“它不起作用” - 这可能是各种各样的问题。以下是一些要检查的事项:

检查ASP.NET进程是否具有该目录的写访问权。

此外,您似乎正在逃避路径中的退格错误。在使用ASP.NET时,您的路径应该相对于应用程序根目录。试试这个:

string path = HttpContext.Current.Server.MapPath("~/App_Data/posts/" + new Guid(post_ID.ToString()).ToString() + ".xml"
Stream writer  = new FileStream(path, FileMode.Create);

最后,确保posts目录存在 - 或者文件创建失败。

答案 1 :(得分:7)

删除无关的单引号并正确转义反斜杠。

甚至更好,使用Server.MapPath(在Page和UserControl基类和HttpContext中可用)。

Server.MapPath("~/App_Data/posts/" + new Guid(post_ID.ToString()).ToString() + ".xml")

出于好奇,post_ID的类型是什么?为什么要将它转换为字符串,然后转换为guid,然后再转换为字符串?

答案 2 :(得分:0)

上述答案很好,但它们依赖于 System.Web 程序集。

如果您在库中创建文件创建方法,那么 Server.MapPath 将不可用。

在这种情况下,您甚至可以使用更通用的说法将数据写入 App_Data 文件夹

我们使用 App_data 文件夹是因为黑客无法使用 http/https 网址访问 app_data 文件夹中的文件(例如 http://yourwebsite.com/app_data/test.xml

            var rootDirectory = AppDomain.CurrentDomain.BaseDirectory;
            var folderNameToBecreated = "posts"; //
            var finalDirectoryPath = System.IO.Path.Combine(rootDirectory, "App_Data", folderNameToBecreated);
            var filename = Guid.NewGuid().ToString() + ".txt";

            //Create Directory if not exists
            if (System.IO.Directory.Exists(finalDirectoryPath) == false)
            {
                System.IO.Directory.CreateDirectory(finalDirectoryPath);
            }

            var fullFilePath = System.IO.Path.Combine(finalDirectoryPath, filename);
            //testing your written file
            using (System.IO.StreamWriter sw = new System.IO.StreamWriter(fullFilePath, true))
            {
                sw.WriteLine("This is a test file");
            }