3

这就是我在文件上创建和写入的内容:

    Create_Directory = @"" + path;
    Create_Name = file_name;

    private void Create_File(string Create_Directory, string Create_Name )
    {
        string pathString = Create_Directory;
        if (!System.IO.Directory.Exists(pathString)) { System.IO.Directory.CreateDirectory(pathString); }

        string fileName = Create_Name + ".txt";
        pathString = System.IO.Path.Combine(pathString, fileName);
        if (!System.IO.File.Exists(pathString)) { System.IO.File.Create(pathString); }

        ///ERROR BE HERE:
        System.IO.StreamWriter file = new System.IO.StreamWriter(pathString);
        file.WriteLine(Some_Method(MP.Mwidth, MP.Mheight, MP.Mtype, "" )); 
        file.Close();
    }

我整天都在努力解决的问题是在创建文件后写入文件。所以,我的程序创建一个文件就好了,然后在写之前给出一个错误:

“在 mscorlib.dll 中发生了“System.IO.IOException”类型的未处理异常”

“附加信息:该进程无法访问文件 'D:\Projects\Project 15\Project 15\world\world maps\A.txt',因为它正被另一个进程使用。”

有趣的是,当我再次运行程序并尝试创建一个已经存在的文件时,如您所见,它会跳过文件创建,开始写入并且工作正常,我真的希望我的程序创建文件并在没有的情况下写入必须重新运行它...我在这里没有看到什么?:S

4

3 回答 3

5

问题是File.Create返回一个打开Stream的,你永远不会关闭它。在您创建StreamWriter.

话虽如此,您不需要“创建”文件。 StreamWriter会自动为你做。只需删除此行:

   if (!System.IO.File.Exists(pathString)) { System.IO.File.Create(pathString); }

一切都应该按照书面规定进行。

请注意,我会稍微改写一下,以使其更安全:

private void Create_File(string directory, string filenameWithoutExtension )
{
    // You can just call it - it won't matter if it exists
    System.IO.Directory.CreateDirectory(directory);

    string fileName = filenameWithoutExtension + ".txt";
    string pathString = System.IO.Path.Combine(directory, fileName);

    using(System.IO.StreamWriter file = new System.IO.StreamWriter(pathString))
    {
        file.WriteLine(Some_Method(MP.Mwidth, MP.Mheight, MP.Mtype, "" )); 
    }
}

您也可以只使用File.WriteAllText或类似的方法来避免以这种方式创建文件。使用using块保证文件将被关闭,即使Some_Method引发异常。

于 2013-03-19T00:24:56.090 回答
2

您可以使用File该类,因为它为您完成了很多工作

例子:

private void Create_File(string Create_Directory, string Create_Name)
{
    string pathString = Create_Directory;
    if (!System.IO.Directory.Exists(pathString)) { System.IO.Directory.CreateDirectory(pathString); }

    pathString = System.IO.Path.Combine(pathString, Create_Name + ".txt");
    File.WriteAllText(fileName, Some_Method(MP.Mwidth, MP.Mheight, MP.Mtype, ""));
}
于 2013-03-19T00:27:29.820 回答
0
 static void Main(string[] args)
        {
            FileStream fs = new FileStream("D:\\niit\\deep.docx", FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs);
            sr.BaseStream.Seek(0, SeekOrigin.Begin);
            string str = sr.ReadLine();
            Console.WriteLine(str);
            Console.ReadLine();

        }
于 2014-07-22T20:17:21.643 回答