我还是C#的新手并坚持这个问题。
我正在尝试读取文件并获取文件扩展名,如果文件名末尾没有'.done'则继续。然后在我的其余代码中,我将数据上传到数据库并将文件名更改为“.done”。
问题是我查看文件的If语句返回true并再次上传所有文件而不仅仅是需要上传的文件。我尝试了很多方法,但似乎都没有。
DirectoryInfo DirInfo = new DirectoryInfo(sFolder);
FileInfo[] fileEntries = DirInfo.GetFiles("*.*", System.IO.SearchOption.TopDirectoryOnly);
foreach (FileInfo fileInfo in fileEntries)
{
if (fileInfo.Extension != ".done")
continue;
// More code
}
我也通过获取所有文件来尝试这个。它仍然会循环并上传所有文件,即使是那些有'.done'的文件。
DirectoryInfo DirInfo = new DirectoryInfo(sFolder);
FileInfo[] fileEntries = DirInfo.GetFiles();
foreach (FileInfo fileInfo in fileEntries)
{
if (fileInfo.Name != ".done")
continue;
// More code
}
此代码有效,但我需要更改它,因为文件扩展名会更改。
DirectoryInfo DirInfo = new DirectoryInfo(sFolder);
FileInfo[] fileEntries = DirInfo.GetFiles("*.ivc", System.IO.SearchOption.TopDirectoryOnly);
foreach (FileInfo fileInfo in fileEntries)
{
if (fileInfo.Name == ".ivc")
continue;
// More code
}
一切都会有所帮助。
由于
答案 0 :(得分:1)
你有没有你的布尔条件向后?如果扩展名不是.done,你想要完成其余的代码,如果IT是.done,则转到循环的下一次迭代,对吗?当扩展名不是.done!
时,continue关键字将带您进入下一次迭代foreach (FileInfo fileInfo in fileEntries)
{
if (fileInfo.Name == ".done")
continue;
// More code
}
答案 1 :(得分:0)
我建议尽可能使用积极思考的“最佳编码”做法(这种建议也适用于生活),因为它们通常更容易阅读。而不是使用“不相等”条件,使用“等于”条件,如下所示:
// just for this example
var folder = Environment.CurrentDirectory;
var dirInfo = new DirectoryInfo(folder);
// type of files to retrieve
// @ is for 'string literal' (see link below)
var extension = @".ivc";
// this translates to: "*.ivc"
var allFiles = @"*" + extension;
// the extension of files already processed, and hence, skipped
var skipExtension = @".done";
var fileEntries = dirInfo.GetFiles(allFiles, System.IO.SearchOption.TopDirectoryOnly);
// track number of files processed
var filesProcessed = 0;
foreach (var fileInfo in fileEntries)
{
// skip files that have already been processed
if (fileInfo.Extension == skipExtension)
{
continue;
}
// process new files found in this directory
filesProcessed++;
}
参考文献: String literals
答案 2 :(得分:0)
为什么不要求只拥有您正在寻找的扩展名的文件?
DirectoryInfo DirInfo = new DirectoryInfo(sFolder);
FileInfo[] fileEntries = DirInfo.GetFiles("*.done", System.IO.SearchOption.TopDirectoryOnly);
foreach (FileInfo fileInfo in fileEntries)
{
// do stuff
}