J'ai pris en compte la réponse et l'ai ajouté à mon code pour une raison quelconque, même si les fichiers ont des temps d'écriture très différents. prendre celui avec le chiffre le plus élevé dans son nom plutôt que celui avec l'heure d'écriture la plus récente.C# sélectionner le fichier le plus récent renvoyant "plus récent" basé sur le titre plutôt que d'écrire le temps
J'ai déjà posté cette question mais je n'ai pas pu obtenir de réponse, maintenant j'ai posté le code complet que j'utilise car je suis perplexe quant à ce que le problème est, POUR CLARIFIER: Mon but est de trier à travers un répertoire et d'obtenir certains fichiers, certains fichiers peuvent avoir le même nom et donc dans ce cas, je dois veiller à ce que seul le fichier le plus récent est pris, autant que je peux voir, j'ai expliqué cela dans mon code fonctionne pas .. Toute aide grandement appréciée
DirectoryInfo directoryInfo = new DirectoryInfo(@"D:\DevP\Custom");
/// Returns latest writen file from the specified directory.
/// If the directory does not exist or doesn't contain any file, DateTime.MinValue is returned.
/// <param name="directoryInfo">Path of the directory that needs to be scanned</param>
/// <returns></returns>
private static DateTime GetLatestWriteTimeFromFileInDirectory(DirectoryInfo directoryInfo)
{
if (directoryInfo == null || !directoryInfo.Exists)
return DateTime.MinValue;
FileInfo[] files = directoryInfo.GetFiles();
DateTime lastWrite = DateTime.MinValue;
foreach (FileInfo file in files)
{
if (file.LastWriteTime > lastWrite)
{
lastWrite = file.LastWriteTime;
}
}
return lastWrite;
}
/// Returns latest writen timestamp file from the specified directory.
/// If the directory does not exist or doesn't contain any file, DateTime.MinValue is returned.
private static FileInfo GetLatestWritenFileFileInDirectory(DirectoryInfo directoryInfo)
{
if (directoryInfo == null || !directoryInfo.Exists)
return null;
FileInfo[] files = directoryInfo.GetFiles();
DateTime lastWrite = DateTime.MinValue;
FileInfo lastWritenFile = null;
foreach (FileInfo file in files)
{
if (file.Name.StartsWith("GLA"))
{
if (file.LastWriteTime > lastWrite)
{
lastWrite = file.LastWriteTime;
lastWritenFile = file;
}
}
else if (file.Name.StartsWith("M&M"))
{
if (file.LastWriteTime > lastWrite)
{
lastWrite = file.LastWriteTime;
lastWritenFile = file;
}
}
else if (file.Name.StartsWith("TRIAL"))
{
if (file.LastWriteTime > lastWrite)
{
lastWrite = file.LastWriteTime;
lastWritenFile = file;
}
}
}
return lastWritenFile;
}
public void Main()
{
String keywordHorizon = ((String)Dts.Variables["User::KeywordGLA"].Value).ToUpper();
string filename = Dts.Variables["User::InputFile"].Value.ToString();
string checkname = filename.ToUpper();
if (Equals("CurrentProcess.arc", Dts.Variables["User::InputFile"].Value) == false)
{
String FullFilePath = filename;
int filecounter = 0; // Increment for counting files, if found
FileInfo fileinfo;
fileinfo = new FileInfo(FullFilePath);
if (checkname.Contains(keywordeHorizon))
{
Dts.Variables["User::GLAFile"].Value = FullFilePath;
filecounter = 1;
if (fileinfo.Exists)
{
if (fileinfo.Length == 0)
{
Dts.Variables["User::FileHasNoData"].Value = true;
Dts.Variables["User::PackageStatus"].Value = "ERROR";
Dts.Variables["User::Succeeded"].Value = false;
}
else
GetLatestWritenFileFileInDirectory(directoryInfo);
}
}
else if (checkname.Contains(keywordM&M))
{
Dts.Variables["User::M&Mfile"].Value = FullFilePath;
filecounter = 1;
if (fileinfo.Exists)
{
if (fileinfo.Length == 0)
{
Dts.Variables["User::FileHasNoData"].Value = true;
Dts.Variables["User::PackageStatus"].Value = "ERROR";
Dts.Variables["User::Succeeded"].Value = false;
}
else
GetLatestWritenFileFileInDirectory(directoryInfo);
}
}
else if (checkname.Contains(keywordTRIAL))
{
Dts.Variables["User::TRIALFile"].Value = FullFilePath;
filecounter = 1;
if (fileinfo.Exists)
{
if (fileinfo.Length == 0)
{
Dts.Variables["User::FileHasNoData"].Value = true;
Dts.Variables["User::PackageStatus"].Value = "ERROR";
Dts.Variables["User::Succeeded"].Value = false;
}
else
GetLatestWritenFileFileInDirectory(directoryInfo);
}
}
Dts.Variables["User::FileCount"].Value = (int)Dts.Variables["User::FileCount"].Value + filecounter;
}
Dts.TaskResult = (int)ScriptResults.Success;
}
}
}
Qu'est-ce qui ne fonctionne pas? – Tigran
'certains fichiers peuvent avoir le même nom', comment? Ils doivent varier au moins par extension, donc le nom ne sera pas par le même – wudzik
dans le répertoire courant J'ai 4 fichiers, deux d'entre eux ont le même nom et cela provoque le programme ne fonctionne pas car il ne sélectionne pas le le plus récent et en utilisant ce – user2546071