C# 从文件路径创建文本文件的有效方法

C# 从文件路径创建文本文件的有效方法,c#,C#,我有一个共享驱动器,大约10000个文件位于大约7000个不同的文件夹中,这些文件夹可能比父文件夹深7个以上。大多数文件(如果不是全部的话)都是.pdf文件,我想为每个.pdf文件创建一个同名的索引文件。索引文件将包含由管道分隔的文件夹名称 结构示例: C:\Files\1000\2000\01\99\AB\01\00\file1.pdf C:\Files\1000\2000\01\99\CD\02\10\file2.pdf C:\Files\1200\2010\20\99\WE\30\12\f

我有一个共享驱动器,大约10000个文件位于大约7000个不同的文件夹中,这些文件夹可能比父文件夹深7个以上。大多数文件(如果不是全部的话)都是.pdf文件,我想为每个.pdf文件创建一个同名的索引文件。索引文件将包含由管道分隔的文件夹名称

结构示例:

C:\Files\1000\2000\01\99\AB\01\00\file1.pdf
C:\Files\1000\2000\01\99\CD\02\10\file2.pdf
C:\Files\1200\2010\20\99\WE\30\12\file3.pdf
C:\Files\1300\2000\31\99\BA\56\23\file4.pdf
C:\Files\1400\2014\59\99\RT\34\34\file5.pdf
索引文件内容示例:

1000|2000|01|99|AB|01|00|<some static info>|<some static info>
1000|2000|01|99|CD|02|10|<some static info>|<some static info>
1200|2010|20|99|WE|30|12|<some static info>|<some static info>
1300|2000|31|99|BA|56|23|<some static info>|<some static info>
1400|2014|59|99|RT|34|34|<some static info>|<some static info>
索引文件将保存为与.pdf相同的文件名,并保存在与文件相同的目录中。我应该如何处理这个问题?谢谢你的建议

编辑: 谢谢,萨姆和弗克尔。当我开始编写它时,我终于能够得到与您所做的类似的文件路径

string[] filenames = Directory.GetFiles(loca, "*.*", SearchOption.AllDirectories);
string fname = DateTime.Now.ToString("yyyy-MM-dd") + ".txt"; //wrote it to a file just to see if I could get the path

File.CreateText(Path.Combine(Log, fname)).Dispose();

foreach(string filename in filenames)
{
using (FileStream f = new FileStream(Path.Combine(Log, fname), FileMode.Append, FileAccess.Write, FileShare.Write))
Using (StreamWriter l = new StreamWriter(f))
{
l.WriteLine(filename);
}
}
MessageBox.Show("Done");

变量loca只是我现在使用的一个测试路径。到目前为止,输出为我提供了文件在测试中所处位置的绝对路径。我将使用你的提示,看看如何进一步发展它。再次感谢您的指导

至于创建
.txt
文件,您可以做以下几件事:

// define your DirectoryInfo dir here

// iterates through all files at all levels in your directory
foreach (FileInfo file in dir.EnumerateFiles("*.pdf", SearchOption.AllDirectories))
{
    // gets the file name without the extension
    string filenameWithoutExtension = file.Name.Substring(
                                       0, file.Name.Length - file.Extension.Length);

    // creates a FileInfo object for the text file you aim to create
    FileInfo textFile = new FileInfo(
                         file.Directory.ToString() + @"\" + file.Name + ".txt");

    // checks that the file does not already exist
    if (!textFile.Exists)
    {
        // creates an empty file
        textFile.Create();
    }
}
这将创建一个与您的文件同名的文本文件(例如,对于
file1.pdf
,它将在同一目录中创建一个名为
file1.txt
)的文件。请注意,IO操作非常不可预测,因此您需要添加符合您的需要/环境的异常处理。另外请注意,这仅在扩展名正好是
.pdf
时有效-如果您需要担心
pdf
,您应该使用
.EnumerateFiles().Where(a=>a.extension.ToLower()==“.pdf”)

就实际写入这些文件而言,您可以在循环中,在
textFile.Create()
之后立即写入,也可以将每个文件信息存储在IEnumerable中,稍后再写入。我怀疑前者对您更有效,但您没有给出很多实现细节。

  • 获取文件名。这种方法可能会有所帮助

  • 使用
    foreach
    循环迭代文件名,并在每次迭代时将文件名添加到输出中


我应该如何处理这个问题?
你可以先写一些代码,然后在这里询问你是否在某个地方卡住了……你对新来的人非常挑剔,只是要求一些帮助。我仍在学习如何做事,只是需要一种方法的指导。我不是在寻找一个人来为我写这整件事,而是在一个方向上推动我应该如何开始…Jayarikahs,
我应该如何处理这个问题?
太宽泛了。我们不知道你知道什么&你不知道什么。你所研究和尝试的。所以在这种形式下,你的问题只是暗示“为我写”。顺便说一句:关于编码问题,如果你想了解更多关于某个主题的信息,你可以使用谷歌。请不要忘记选择其中一个答案(目前是Sam的或我的),以便未来的用户可以知道哪一个对你帮助最大。我不能假设你想如何解释我的上下文,因为英语不是我的母语。如果这意味着假设我所写的内容与你所假设的一样,那么我也需要学习我的英语,因为我并不想让我的上下文以那种方式被理解。你可以创建一个递归方法,迭代每个目录和该目录的后续子目录。执行此操作时,对于每个扩展名为pdf的文件,创建一个扩展名为txt的同名索引文件。或者,您可以使用上述方法或类似的方法:sorry@furkle。。。我打字时误按了回车键。“我还没完呢!”贾梅肖啊,没问题。我会投赞成票,但我没有足够的声誉。
// define your DirectoryInfo dir here

// iterates through all files at all levels in your directory
foreach (FileInfo file in dir.EnumerateFiles("*.pdf", SearchOption.AllDirectories))
{
    // gets the file name without the extension
    string filenameWithoutExtension = file.Name.Substring(
                                       0, file.Name.Length - file.Extension.Length);

    // creates a FileInfo object for the text file you aim to create
    FileInfo textFile = new FileInfo(
                         file.Directory.ToString() + @"\" + file.Name + ".txt");

    // checks that the file does not already exist
    if (!textFile.Exists)
    {
        // creates an empty file
        textFile.Create();
    }
}