我有一个可能存在或可能不存在的文件路径。
我想创建/覆盖文件,我有这个代码:
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...
错误。
我做错了什么?如果不存在,它不应该创建文件吗?
答案 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))
{
}
指定操作系统应该打开文件(如果存在); 否则,应创建一个新文件。
答案 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);
}
}
}
}