Asp.net FileStream如果文件不存在,则创建抛出错误

时间:2013-04-30 06:46:49

标签: c# asp.net filestream

我有一个可能存在或可能不存在的文件路径。

我想创建/覆盖文件,我有这个代码:

string filePath = GetFilePath();
using (FileStream file = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None))
{
    xDoc.Save(file);
}

当我调用using (FileStream file ...)且该文件不存在时,会引发Could not find a part of the path...错误。

我做错了什么?如果不存在,它不应该创建文件吗?

4 个答案:

答案 0 :(得分:3)

FileStream无法创建不存在的中间目录。 This question可以帮助你。

答案 1 :(得分:1)

如果文件不存在,

FileMode.OpenOrCreate会创建一个文件。如果您还需要创建目录:

bool dirExists = System.IO.Directory.Exists(dir);
if(!dirExists)
    System.IO.Directory.CreateDirectory(dir);

using(var fs = new FileStream(filePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None))
{

}

OpenOrCreate

  

指定操作系统应该打开文件(如果存在);   否则,应创建一个新文件。

答案 2 :(得分:1)

试试这个:

void OpenOrCreateFile()
{
  try
   {
     string filePath = GetFilePath();
     EnsureFolder(filePath); //if directory not exist create it
     using(var fs = new FileStream(filePath, FileMode.OpenOrCreate))
       {
          //your code
       }

   }
   catch(Exception ex)
   {
     //handle exception   
   }
}

void EnsureFolder(string path)
{
    string directoryName = Path.GetDirectoryName(path);
    if ((directoryName.Length > 0) && (!Directory.Exists(directoryName))
    {
        Directory.CreateDirectory(directoryName);
    }
}

答案 3 :(得分:0)

您可以使用StreamWriter有一个布尔参数追加来覆盖其内容退出的文件 http://msdn.microsoft.com/en-IN/library/36b035cb.aspx

public StreamWriter(
    string path,
    bool append
)

您可以使用以下给定的代码

using System;
using System.IO;
using System.Text;

    namespace ConsoleApplication
    {
    class Program
    {
        static void Main(string[] args)
        {
            string fileName = "test.txt";
            string textToAdd = "Example text in file";


            using (StreamWriter writer = new StreamWriter(fileName, false))
            {
                writer.Write(textToAdd);
            }
        }
    }
}