2013-04-30 54 views
1

我有一個可能存在或可能不存在的文件路徑。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...錯誤。

我做錯了什麼?不應該創建文件如果不存在?

回答

3

FileStream無法創建不存在的中間目錄。 This question應該可以幫到你。

+0

對此沒有任何線索。 – Catalin 2013-04-30 06:54:52

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

指定操作系統應打開一個文件,如果存在的話; 否則,應創建一個新文件。

+0

同樣的錯誤,但問題是davogones指定的。如果需要創建文件夾,則任何'FileMode'選項都會失敗 – Catalin 2013-04-30 06:54:20

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); 
      } 
     } 
    } 
} 
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); 
    } 
} 
相關問題