将以前的路径更改为保留文件名的自定义路径,并使用 c# 中的流编写器创建文件



我正在使用StreamWriter创建多个文件,我希望在特定目录中创建这些文件

StreamWriter w = new StreamWriter(File.Create(name + ".txt"));
w.WriteLine(name);
w.Close();

这里name是用作文件名的变量,也可以写入该文件,但我的问题是我希望在特定目录中创建此文件。

使用 Path.Combine

Path.Combine使用Path.PathSeparator,并检查第一个路径的末尾是否已经有分隔符,因此它不会复制分隔符。此外,它还检查要组合的路径元素是否具有无效字符。

引自这篇SO帖子

此外,检查变量是否name文件名包含无效字符也会很有成效。

您可以首先使用 Path.GetInvalid文件名字符方法从变量中删除name无效字符:

var invalidChars = Path.GetInvalidFileNameChars();
string invalidCharsRemoved = new string(name
.Where(x => !invalidChars.Contains(x))
.ToArray());

引自这篇SO帖子

string directory = "c:\temp";

而不是

File.Create(name + ".txt")

string filename = invalidCharsRemoved + ".txt"
File.Create(Path.Combine(directory , filename ))

您也可以包含路径:

string path = "C:\SomeFolder\";
File.Create( path + name + ".txt");

或者使用如下Path.Combine

File.Create( Path.Combine(path, name + ".txt") );
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包含类似@"U:TDScriptsacchf122_0023"

好的,根据您评论中的新信息,您实际上需要摆脱旧的路径和目录。

您可以使用 Path.GetFileNameWithoutExtension 方法来实现这一点。之后,您可以使用Path.Combing创建自己的路径。

下面是一个示例来演示这一点:

string myDirectory  = @"C:temp";
string oldPathWithName = @"U:TDScriptsacchf122_0023";
string onlyFileName = Path.GetFileNameWithoutExtension(oldPathWithName);
string myNewPath = Path.Combine(myDirectory, onlyFileName + ".txt");
Console.WriteLine(myNewPath);

我希望这能解决你的问题。

你可以像这样为目录声明一个path

string path = @"c:folder....";

然后使用以下命令:

File.Create( path + name + ".txt");

你会得到你想要的

相关内容

  • 没有找到相关文章