我想做的是从一个文件夹中的每个文件中获取6个文件信息,以及它下面的所有文件夹。这些作品是:
我有下面的代码,它将列出一个包含path的文件列表,但是我正在努力弄清楚如何在我的输出中获得这个附加信息。如果它可以用分号或别的什么来分隔,那将是很好的,因为最终的愿望是将这个信息写到一个表中。任何帮助都是非常感谢的。
private void GetMyFiles () {
string rootDirectory = @"" + txtPathToScan.Text + "";
string extension = "*";
List<string> files = GetFilesRecursively (rootDirectory, extension);
Console.WriteLine ("Got {0} files of extension {1} in directory {2}", files.Count, extension, rootDirectory);
foreach (string file in files) {
Console.WriteLine (file);
}
}
/// <summary>
/// This function calls itself recursively for each of the subdirectories that it finds
/// in the root directory passed to it. It returns files of the extension as specified
/// by the caller.
/// </summary>
/// <param name="rootDirectory">The directory from which the file list is sought.</param>
/// <param name="extension">The particular extension for which the file list is sought.</param>
/// <returns>A list of all the files with extension as specified by the caller. This list
/// includes the files in the current directory as well its sub-directories.</returns>
static List<string> GetFilesRecursively (string rootDirectory, string extension) {
// Uncomment this line only if you want to trace the control as it goes from
// sub-directory to sub-directory. Be ready for long scrolls of text output:
//Console.WriteLine ("Currently in directory {0}", rootDirectory);
// Create an output list:
List<string> opList = new List<string> ();
// Get all files in the current directory:
string[] allFiles = Directory.GetFiles (rootDirectory, "*." + extension);
// Add these files to the output list:
opList.AddRange (allFiles);
// Get all sub-directories in current directory:
string[] subDirectories = Directory.GetDirectories (rootDirectory);
// And iterate through them:
foreach (string subDir in subDirectories) {
// Get all the files from the sub-directory:
List<string> subDirFileList = GetFilesRecursively (subDir, extension);
// And add it to this list:
opList.AddRange (subDirFileList);
}
// Finally return the output list:
return opList;
}发布于 2015-02-21 14:56:44
您可以使用FileInfo类获得其中的大多数..。
var info = new System.IO.FileInfo(@"c:\folder\file.ext");它具有Length、CreationTime、LastAccessTime和LastWriteTime的属性,要将它们输出(例如)到控制台,您可以.
Console.WriteLine("For file {0}", info.Name);
Console.WriteLine("Length is {0}", info.Length);
Console.WriteLine("Creation time is {0}", info.CreationTime);
Console.WriteLine("Last access time is {0}", info.LastAccessTime);
Console.WriteLine("Last write time is {0}", info.LastWriteTime);要获得完整的文件名,可以使用GetFileNameWithoutExtension。
var fileName = System.IO.Path.GetFileNameWithoutExtension(@"c:\folder\file.ext")在上面的示例中,filename将等于"file"。
获取文件扩展名的描述需要更多的工作,但可以使用SHGetFIleInfo完成,有关详细信息,请参阅this answer。
要将此与当前代码集成(如果您不太担心文件描述),可以更改GetFilesRecursively方法以返回List<FileInfo>.
static List<FileInfo> GetFilesRecursively (string rootDirectory, string extension)相应地更新您的opList变量。
List<FileInfo> opList = new List<FileInfo> ();然后调整AddRange调用以添加FileInfo对象..。
opList.AddRange (allFiles.Select(f => new FileInfo(f)));最后,还需要更改subDirFileList的类型,因此需要更改List<FileInfo>。
(我想这就是一切!)
发布于 2015-02-21 16:41:30
对于后人,完整的答案如下。如果你要投票支持理查德的答案,请只投的票。谢谢!
private void GetMyFiles () {
string rootDirectory = @"" + txtPathToScan.Text + "";
string extension = "*";
List<FileInfo> files = GetFilesRecursively (rootDirectory, extension);
Console.WriteLine ("Got {0} files of extension {1} in directory {2}", files.Count, extension, rootDirectory);
foreach (FileInfo file in files)
{
Console.WriteLine(file);
var info = new System.IO.FileInfo(@"" + file + "");
Console.WriteLine("For file {0}", info.Name);
Console.WriteLine("Length is {0} KB", info.Length/1024);
Console.WriteLine("Creation time is {0}", info.CreationTime);
Console.WriteLine("Last access time is {0}", info.LastAccessTime);
Console.WriteLine("Last write time is {0}", info.LastWriteTime);
}
}
/// <summary>
/// This function calls itself recursively for each of the subdirectories that it finds
/// in the root directory passed to it. It returns files of the extension as specified
/// by the caller.
/// </summary>
/// <param name="rootDirectory">The directory from which the file list is sought.</param>
/// <param name="extension">The particular extension for which the file list is sought.</param>
/// <returns>A list of all the files with extension as specified by the caller. This list
/// includes the files in the current directory as well its sub-directories.</returns>
static List<FileInfo> GetFilesRecursively(string rootDirectory, string extension)
{
// Uncomment this line only if you want to trace the control as it goes from
// sub-directory to sub-directory. Be ready for long scrolls of text output:
//Console.WriteLine ("Currently in directory {0}", rootDirectory);
// Create an output list:
List<FileInfo> opList = new List<FileInfo>();
// Get all files in the current directory:
string[] allFiles = Directory.GetFiles (rootDirectory, "*." + extension);
// Add these files to the output list:
opList.AddRange(allFiles.Select(f => new FileInfo(f)));
// Get all sub-directories in current directory:
string[] subDirectories = Directory.GetDirectories (rootDirectory);
// And iterate through them:
foreach (string subDir in subDirectories) {
// Get all the files from the sub-directory:
List<FileInfo> subDirFileList = GetFilesRecursively (subDir, extension);
// And add it to this list:
opList.AddRange (subDirFileList);
}
// Finally return the output list:
return opList;
}https://stackoverflow.com/questions/28647079
复制相似问题