Catalin
Catalin

Reputation: 11721

Asp.net FileStream Create throws error if file doesn't exist

I have a file path that might exist or might not exist.

I want to create / override the file, and i have this code:

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

When i call using (FileStream file ...) and the file doesn't exist, it throws an Could not find a part of the path... error.

I am doing something wrong? shouldn't it create the file if doesn't exist?

Upvotes: 4

Views: 7057

Answers (4)

Zaheer Ahmed
Zaheer Ahmed

Reputation: 28548

try this:

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);
    }
}

Upvotes: 1

Guru Kara
Guru Kara

Reputation: 6462

You can use StreamWriter has a boolean parameter append to overwrite the file it contents exits http://msdn.microsoft.com/en-IN/library/36b035cb.aspx

public StreamWriter(
    string path,
    bool append
)

You can use the below given code

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);
            }
        }
    }
}

Upvotes: 0

Tim Schmelter
Tim Schmelter

Reputation: 460138

FileMode.OpenOrCreate creates a file if it doesn't exist. If you also need to create the directory:

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

Specifies that the operating system should open a file if it exists; otherwise, a new file should be created.

Upvotes: 2

davogones
davogones

Reputation: 7399

FileStream can't create intermediate directories that don't exist. This question should help you.

Upvotes: 5

Related Questions