private void pictureBox2_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button != MouseButtons.Left) return;
if (DrawingRects.Count > 0)
{
// The last drawn shape
var dr = DrawingRects.Last();
if (dr.Rect.Width > 0 && dr.Rect.Height > 0)
{
rectImage = cropAtRect((Bitmap)pictureBox2.Image, dr.Rect);
if (saveRectangles)
{
DirectoryInfo dInfo = new DirectoryInfo(@"d:\rectangles");
var files = GetFilesByExtensions(dInfo, ".bmp");
if (files.Count() > 0)
{
foreach (var f in files)
{
}
}
rectangleName = @"d:\Rectangles\rectangle" saveRectanglesCounter ".bmp";
FileList.Add($"{dr.Location}, {dr.Size}", rectangleName);
string json = JsonConvert.SerializeObject(
FileList,
Formatting.Indented // this for pretty print
);
using (StreamWriter sw = new StreamWriter(@"d:\rectangles\rectangles.txt", false))
{
sw.Write(json);
sw.Close();
}
rectImage.Save(rectangleName);
saveRectanglesCounter ;
}
pixelsCounter = rect.Width * rect.Height;
pictureBox1.Invalidate();
listBox1.DataSource = FileList.ToList();
listBox1.SelectedIndex = listBox1.Items.Count - 1;
}
}
}
我正在使用 DirectoryInfo 和 GetFilesByExtensions 方法
public IEnumerable<FileInfo> GetFilesByExtensions(DirectoryInfo dir, params string[] extensions)
{
if (extensions == null)
throw new ArgumentNullException("extensions");
IEnumerable<FileInfo> files = dir.EnumerateFiles();
return files.Where(f => extensions.Contains(f.Extension));
}
如果有現有檔案,例如 rectangle1.bmp rectangle2.bmp .....rectangle7.bmp 那么在硬碟上創建一個新的矩形檔案時,我希望它是 rectangle8.bmp
現在它正在嘗試創建另一個 rectangle1.bmp 并給出例外,我不想洗掉現有檔案而是創建新檔案。
并使其盡可能通用。但主要目標是根據現有檔案名創建新檔案名并繼續計數。
uj5u.com熱心網友回復:
您可以撰寫一個方法來檢查建議的名稱是否存在
string GetNextName(string baseName, string extension)
{
int counter = 1;
string nextName = baseName counter extension;
while(File.Exists(nextName))
{
counter ;
nextName = baseName counter extension;
}
return nextName;
}
并以這種方式呼叫它:
rectangleName = GetNextName(@"d:\Rectangles\rectangle", ".bmp");
uj5u.com熱心網友回復:
您可以使用 linq 并在一個陳述句中執行所有操作,如下所示:
DirectoryInfo di = new DirectoryInfo(@"D:\rectangles");
var maxIndex = di.GetFiles().Select(fi => fi.Name.Replace("rectangle","").Replace(".bmp", "")).Max(i => i);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/516763.html
標籤:C#表格
上一篇:如何在datagridview中只保存新行和修改的行?
下一篇:在運行時加載程式集.NET6
