将以前的路径更改为自定义路径,保留文件名并使用 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.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);

希望这能解决您的问题。