如何在VB.Net中使用更好的方法在变量中使用最近使用的文件

时间:2018-04-15 20:56:34

标签: vb.net visual-studio

我正在使用Visual Studio的“设置”功能,其中包含字符串类型和用户范围。

我尝试在我的菜单项上列出最近使用过的最近文件,但我认为如果使用其他语句,我的方法对编码方法似乎不太好。

有没有办法以更好的方法获得它?

 Public Sub addRecentUsedFiles(recentFile As String)
        If recentFile <> My.Settings.recent1 Then
            If recentFile <> My.Settings.recent2 Then
                If recentFile <> My.Settings.recent3 Then
                    If recentFile <> My.Settings.recent4 Then
                        My.Settings.recent5 = My.Settings.recent4
                        My.Settings.recent4 = My.Settings.recent3
                        My.Settings.recent3 = My.Settings.recent2
                        My.Settings.recent2 = My.Settings.recent1
                        My.Settings.recent1 = recentFile
                    Else
                        My.Settings.recent4 = My.Settings.recent3
                        My.Settings.recent3 = My.Settings.recent2
                        My.Settings.recent2 = My.Settings.recent1
                        My.Settings.recent1 = recentFile
                    End If
                Else
                    My.Settings.recent3 = My.Settings.recent2
                    My.Settings.recent2 = My.Settings.recent1
                    My.Settings.recent1 = recentFile
                End If
            Else
                My.Settings.recent2 = My.Settings.recent1
                My.Settings.recent1 = recentFile
            End If
        End If

2 个答案:

答案 0 :(得分:1)

我推荐这种方法的固定大小的队列。请参阅此处定义的数据结构。我在下面有它,但做了很多改动。      Fixed size queue which automatically dequeues old values upon new enques

在您的情况下,您将使用String的数据类型并将限制设置为5.

我已经包含了基本代码,删除了并发性,并添加了一个Contains方法。还添加了一个枚举器,以便您可以访问数据。

    [Serializable()]
    public class FixedSizedQueue<T>
    {
        System.Collections.Generic.Queue<T> q = new System.Collections.Generic.Queue<T>();

        public int Limit { get; set; }
        public void Enqueue(T obj)
        {
            q.Enqueue(obj);
            while (q.Count > Limit) q.Dequeue() ;
        }

        public bool Contains(T obj)
        {
            return q.Contains(obj);
        }

        public Queue<T>.Enumerator GetEnumerator()
        {
            return q.GetEnumerator();
        }
    }

然后你将如何使用它,假设My.Settings.Recent是这种类型的String,你指定了5的限制,而My.Settings.Recent不是null。

if ( ! My.Settings.Recent.Contains(recentFile) )
    My.Settings.Recent.Enqueue(recentFile);

这是另一个向对象写入数据的例子,只有在代码为“6”到“10”之后才会出现。

FixedSizedQueue<string> t = new FixedSizedQueue<string>();
t.Limit = 5;
for (int i = 0; i <= 10; i++)
    if (! t.Contains(i.ToString())) 
        t.Enqueue(i.ToString());

答案 1 :(得分:0)

最简单的方法是将最近使用的文件(文件名)写入文本文件。示例代码:

  File.WriteAllText("C:\test.txt","last file name")

现在,如果你使用WriteAllText方法,它将重写(或创建)文本文件。如果你想从不同的地方写入文本文件,你可以简单地使用File.AppendText方法:

 File.AppendText("C:\test.txt","last file name" + Environment.NewLine)

然后,如果要从文本文件中检索文件名,只需创建一个List(of String)来读取(并存储数据)文本文件:

  Dim readFile As New List(Of String)(File.ReadAllLines("C:\test.txt")

现在你有一个列表,它已经成功地将文本文件中的每一行存储为一个单独的项目。你可以轻松遍历列表并随意执行任何操作,例如:

 For Each Item In readFile
  ComboBox1.Items.Add(Item)
 Next

希望这有助于丰富您的知识:)