On Monday, 26 August 2013 at 23:32:26 UTC, Andre Artus wrote:
On Monday, 26 August 2013 at 13:30:38 UTC, Alexandre wrote:
Hi :)
I'm starting with D language... and, I try to convert a C# code
to D...
So, my C# code, I get file informations, and, I create folders
with all days of month of specific year...
So, that is my C# code...
-- SNIP --
So, to create directory and move files... I get the
documentation
on that page: http://dlang.org/phobos/std_file.html
But, I don't know, How I can get the file information and what
is
the best way to create the directory's, so, I need some help :)
I appreciate the help :)
Okay, I banged together something that may be close to what you
want. I'm not a D expert, so someone is sure to point out some
areas for improvement.
There does not seem to be any reason to use objects/classes for
what you want. In fact if I was to write it in C# I would make
the methods static.
As an aside: it's not generally considered good practice to do
expensive computations or IO in a constructor (BOCTAOE).
I did not split building the archive directory structure from
the file moving part. I prefer to only create a directory if
there is going to be a file in it. This may have a impact on
performance, but I suspect it is negligible. If it's an issue
measure, measure, measure.
module main;
import std.stdio, std.algorithm, std.conv;
import std.array, std.random, std.datetime;
import std.file, std.path, std.utf, std.string;
int main(string[] argv)
{
// string prefixed with 'r' similar to '@' in C#
auto searchPath = r"G:\archivetest\search";
auto archivePath = r"G:\archivetest\archive";
moveToArchive(searchPath, archivePath);
return 0;
}
void moveToArchive(string searchPath, string archivePath)
{
// This ought to be a library thing.
immutable string[12] MesesDoAno =
[
"Janeiro", "Fevereiro",
"Marco", "Abril",
"Maio", "Junho",
"Julho", "Agosto",
"Setembro", "Outubro",
"Novembro", "Dezembro"
];
// http://dlang.org/phobos/std_file.html#.dirEntries
auto de = dirEntries(searchPath,"*.RE{M,T}",
SpanMode.shallow, false);
// Sorting not required, just a personal preference
auto sortedFiles =
de.array.sort!((DirEntry x, DirEntry y)
=> x.timeLastModified < y.timeLastModified);
foreach(DirEntry e; sortedFiles) {
// I'm being extra verbose here so that it's easy to follow
in a debugger
auto tlm = e.timeLastModified;
When testing I used timeLastModified as that created the greatest
variability with the files I had at my disposal. If you need to
use the file creation time then replace with timeCreated, as
follows:
auto sortedFiles = de.array.sort!((x, y) => x.timeCreated <
y.timeCreated);
foreach(DirEntry e; sortedFiles) {
auto tlm = e.timeCreated;