System.IO.File是一种类型而不是命名空间

时间:2016-04-19 02:44:39

标签: c# file namespaces

我想使用System.Io.File命名空间创建一个文件,无论我在MVC上使用它是什么新手,当我发布我的proyect时我得到这个错误"使用命名空间指令只能应用于命名空间; '有System.IO.File'是一个类型而不是命名空间"

这是我使用的声明:

using System;
using System.Reflection;
using System.Data;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.IO.File;
using System.Text;

using (var reader = System.IO.File.CreateText(@"C:\inetpub\wwwroot\procedimiento.txt"))
            {
                // Starting outer json array
                reader.WriteLine("[");

                for (var rowIndex = 0; rowIndex < myTable.Rows.Count; rowIndex++)
                {
                    var row = myTable.Rows[rowIndex];
                    var rowValues = new List<string>(); // can be reused if needed
                    foreach (DataColumn column in myTable.Columns)
                        rowValues.Add(row[column].ToString());

                    var jsonRow = JsonConvert.SerializeObject(rowValues);

                    // Write current row
                    reader.Write(jsonRow);

                    // Add separating comma
                    if (rowIndex != myTable.Rows.Count - 1)
                        reader.WriteLine(",");
                }

                // End outer json array
                reader.WriteLine("]");
            }

3 个答案:

答案 0 :(得分:3)

using关键字具有不同的语义,具体取决于它所在的位置。

直接放入文件时,它可以告诉要导入哪些名称空间。在该上下文中,您不能直接使用类的using语句。好。你可以,但语法不同。 MSDN

另一种用法是在对象超出范围时处置它。在这种情况下,您可以输入完全限定的类名(命名空间+类名)或仅输入类名。 MSDN

在你的代码中你混合了两个。

备选方案1

完全删除文件中的using语句,只需在语句中指定完整的类名。

using System.Web;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Text;

//in your method
using (var reader = System.IO.File.CreateText(@"C:\inetpub\wwwroot\procedimiento.txt"))

备选方案2

从语句和类名中删除命名空间:

using System.Web;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.IO;
using System.Text;

//in your method
using (var reader = File.CreateText(@"C:\inetpub\wwwroot\procedimiento.txt"))

备选方案3

使用指令重命名该类。当编译器无法区分不同的标识符(比如在不同的导入名称空间中具有相同的类名)时,通常使用此方法。

using System.Web;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Newtonsoft.Json;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.IO;
using IoFile = System.IO.File; //this
using System.Text;

//in your method
using (var reader = IoFile.CreateText(@"C:\inetpub\wwwroot\procedimiento.txt"))

答案 1 :(得分:1)

您的代码缺少类和方法声明。 System.IO.File实际上是一种类型,你不应该在using语句中引用它。您需要引用的只是System.IO,然后您可以调用File.CreateText()。

using System;
using System.IO;

public class MyClass
{
    public void CreateFile()
    {
        string path = @"c:\temp\MyTest.txt";
        if (!File.Exists(path)) 
        {
            // Create a file to write to.
            using (StreamWriter sw = File.CreateText(path)) 
            {
                sw.WriteLine("Hello");
                sw.WriteLine("And");
                sw.WriteLine("Welcome");
            }   
        }
    }
}

MSDN on File.CreateText()

答案 2 :(得分:0)

试试这个。

 using (StreamWriter sw = File.CreateText(fileName))
    {
        sw.WriteLine("New file created: {0}", DateTime.Now.ToString());
    }