誰かが助けることができるかどうか疑問に思っています。私は、ユーザー名に基づいて特定のディレクトリから複数のファイルを取得する次のコードを取得しています。私はファイルを返すだけです。 xls、.xlsx、または.pdf形式です。ファイル名にユーザ名が含まれています。ユーザ名の最初の文字がファイル名の最初の文字と等しいこと。ファイル名はデリミタの前のユーザ名と正確に一致しています。区切り文字の前にユーザー名が付いているファイルと一致するC#
最終的なビットは私が苦労しているところです。私は現在持っているコードは、次のファイルに戻ります:v_ashby-smith_2010_testtesttesttest.xlsx、v_ashby-smith_2011_testtesttesttest.xls、
は、しかし、私はそれがこのファイルとしてファイルv_ashby-smithson_2010_testtesttesttest.xlsを返却する必要はありませんv_ashby-smithson_2010_testtesttesttest.xlsをユーザー名(v_ashby-smith)とまったく同じではありません。私は、例えば、XXのような区切り記号の前にユーザー名に合ったファイルを手に入れた人について考えました。何か案は?
public FileInfo[] ReadFiles(String userName)
{
DirectoryInfo bonusInfoDirectory = null;
FileInfo[] files = null;
try
{
string userNameFirstLetter = userName.First().ToString();
string directoryPath = System.Configuration.ConfigurationManager.AppSettings["DirectoryPath"];
bonusInfoDirectory = new DirectoryInfo(directoryPath);
files = bonusInfoDirectory.GetFiles().Where(f => f.Extension == ".xls" ||
f.Extension == ".xlsx" || f.Extension == ".pdf")
.Where(f => f.Name.Contains(userName))
.Where(f => f.Name.First().ToString() == userNameFirstLetter)
.OrderByDescending(f => f.Name).ToArray();
}
catch (DirectoryNotFoundException exp)
{
throw new DirectoryNotFoundException("Directory not found " + exp.Message);
}
catch (IOException exp)
{
throw new IOException("The Process cannot access the file because it is in use by
another process " + exp.Message);
}
return files;
}
あなたのファイル名で判断すると、(ユーザー名の開始インデックス+ユーザー名の長さの)インデックスを使用してWhere句を追加できませんでしたし、そのインデックスのcharが区切り文字かどうかを確認できませんでしたか?この場合、 "_" => ex:.Where(f => f [f.Name.IndexOf(userName)+ username)のように見えます。長さ(多分+1)] == [区切り文字として] –
私はそれを考えていませんでした。ちょうど遊んで私は別のソリューションをスプリットを使用している可能性がありますと思う。したがって.Where(f => f.Name.Split(Convert.ToChar( 'X')[0] .Equals(userName)) –