将以前的路径更改为自定义路径,保留文件名并使用 C# 中的流编写器创建文件
Change former path to custom path keeping the filename and create a file using stream writer in c#
我正在使用 StreamWriter
创建多个文件,我希望在特定目录中创建这些文件
StreamWriter w = new StreamWriter(File.Create(name + ".txt"));
w.WriteLine(name);
w.Close();
这里name
是用作文件名的变量,也将写入该文件,但我的问题是我希望在特定目录中创建该文件。
您也可以包含路径:
string path = "C:\SomeFolder\";
File.Create( path + name + ".txt");
或使用 Path.Combine
如:
File.Create( Path.Combine(path, name + ".txt") );
您可以像这样为您的目录声明一个 path
:
string path = @"c:\folder\....";
然后使用以下命令:
File.Create( path + name + ".txt");
你会得到你想要的
Path.Combine
使用 Path.PathSeparator
并检查第一个路径末尾是否已经有分隔符,因此它不会重复分隔符。此外,它还会检查要组合的路径元素是否包含无效字符。
引自此
此外,检查您的 name
变量是否包含文件名的无效字符也会很有帮助。
您可以先使用 Path.GetInvalidFileNameChars 方法从 name
变量中删除无效字符:
var invalidChars = Path.GetInvalidFileNameChars();
string invalidCharsRemoved = new string(name
.Where(x => !invalidChars.Contains(x))
.ToArray());
引自此SO post
string directory = "c:\temp";
而不是
File.Create(name + ".txt")
使用
string filename = invalidCharsRemoved + ".txt"
File.Create(Path.Combine(directory , filename ))
FileStream fileStream = null;
StreamWriter writer = null;
try
{
string folderPath = @"D:\SpecificDirecory\";
string path = Path.Combine(folderPath , "fileName.txt");
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
fileStream = new FileStream(@path, FileMode.Create);
writer = new StreamWriter(fileStream);
writer.Write(fileBuilder.ToString());
}
catch (Exception ex)
{
throw ex;
}
finally
{
writer.Close();
fileStream.Close();
}
name
contains some thing like @"U:\TDScripts\acchf122_0023"
好的,根据您评论中的新信息,您实际上需要删除旧路径和目录。
您可以使用 Path.GetFileNameWithoutExtension method to achieve that. After that you can use Path.Combine 创建自己的路径。
这里有一个例子来证明这一点:
string myDirectory = @"C:\temp";
string oldPathWithName = @"U:\TDScripts\acchf122_0023";
string onlyFileName = Path.GetFileNameWithoutExtension(oldPathWithName);
string myNewPath = Path.Combine(myDirectory, onlyFileName + ".txt");
Console.WriteLine(myNewPath);
希望这能解决您的问题。
我正在使用 StreamWriter
创建多个文件,我希望在特定目录中创建这些文件
StreamWriter w = new StreamWriter(File.Create(name + ".txt"));
w.WriteLine(name);
w.Close();
这里name
是用作文件名的变量,也将写入该文件,但我的问题是我希望在特定目录中创建该文件。
您也可以包含路径:
string path = "C:\SomeFolder\";
File.Create( path + name + ".txt");
或使用 Path.Combine
如:
File.Create( Path.Combine(path, name + ".txt") );
您可以像这样为您的目录声明一个 path
:
string path = @"c:\folder\....";
然后使用以下命令:
File.Create( path + name + ".txt");
你会得到你想要的
Path.Combine
使用 Path.PathSeparator
并检查第一个路径末尾是否已经有分隔符,因此它不会重复分隔符。此外,它还会检查要组合的路径元素是否包含无效字符。
引自此
此外,检查您的 name
变量是否包含文件名的无效字符也会很有帮助。
您可以先使用 Path.GetInvalidFileNameChars 方法从 name
变量中删除无效字符:
var invalidChars = Path.GetInvalidFileNameChars();
string invalidCharsRemoved = new string(name
.Where(x => !invalidChars.Contains(x))
.ToArray());
引自此SO post
string directory = "c:\temp";
而不是
File.Create(name + ".txt")
使用
string filename = invalidCharsRemoved + ".txt"
File.Create(Path.Combine(directory , filename ))
FileStream fileStream = null;
StreamWriter writer = null;
try
{
string folderPath = @"D:\SpecificDirecory\";
string path = Path.Combine(folderPath , "fileName.txt");
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
fileStream = new FileStream(@path, FileMode.Create);
writer = new StreamWriter(fileStream);
writer.Write(fileBuilder.ToString());
}
catch (Exception ex)
{
throw ex;
}
finally
{
writer.Close();
fileStream.Close();
}
name
contains some thing like@"U:\TDScripts\acchf122_0023"
好的,根据您评论中的新信息,您实际上需要删除旧路径和目录。
您可以使用 Path.GetFileNameWithoutExtension method to achieve that. After that you can use Path.Combine 创建自己的路径。
这里有一个例子来证明这一点:
string myDirectory = @"C:\temp";
string oldPathWithName = @"U:\TDScripts\acchf122_0023";
string onlyFileName = Path.GetFileNameWithoutExtension(oldPathWithName);
string myNewPath = Path.Combine(myDirectory, onlyFileName + ".txt");
Console.WriteLine(myNewPath);
希望这能解决您的问题。