使用c#创建文​​件,如evernote

时间:2016-07-28 21:05:20

标签: c#

我目前正在为一个笔记管理员创建一个UI,并且只是要预览文档等,但我想知道我需要创建什么文件类型,而不是我想做标记文件等的事情,最好是在c#中,基本上是我自己的evernote,这些程序如何存储笔记?

1 个答案:

答案 0 :(得分:0)

我不知道如何直接标记文件,但您可以创建自己的系统来执行此操作。我提到了两种方法:

  1. 第一种方法是格式化音符/文件的内容,以便有两个部分,即标签和实际文本。当程序加载注释/文件时,它会分隔标记和文本。这有一个缺点,即程序必须加载整个文件才能找到标签。

  2. 第二种方法是拥有一个包含文件名及其相关标签的数据库。通过这种方式,程序不必加载整个文件就可以找到标签。

  3. 第一种方式

    在此解决方案中,您需要以特定方式格式化文件

    <Tags>
    tag1,tag2,tag3
    </Tags>
    <Text>
    The text you 
    want in here
    </Text>
    

    通过设置这样的文件,程序可以将标签与文本分开。要加载它的标签,您需要以下代码:

    public List<string> GetTags(string filePath)
    {
        string fileContents;
    
        // read the file if it exists
        if (File.Exists(filePath))
            fileContents = File.ReadAllText(filePath);
        else
            return null;
    
        // Find the place where "</Tags>" is located
        int tagEnd = fileContents.IndexOf("</Tags>");
    
        // Get the tags
        string tagString = fileContents.Substring(6, tagEnd - 6).Replace(Environment.NewLine, ""); // 6 comes from the length of "<Tags>"
    
        return tagString.Split(',').ToList();
    }
    

    然后要获得你需要的文字:

    public string GetText(string filePath)
    {
        string fileContents;
    
        // read the file if it exists
        if (File.Exists(filePath))
            fileContents = File.ReadAllText(filePath);
        else
            return null;
    
        // Find the place where the text content begins
        int textStart = fileContents.IndexOf("<Text>") + 6 + Environment.NewLine.Length; // The length on newLine is neccecary because the line shift after "<Text>" shall NOT be included in the text content
    
        // Find the place where the text content ends
        int textEnd = fileContents.LastIndexOf("</Text>");
    
        return fileContents.Substring(textStart, textEnd - textStart - Environment.NewLine.Length); // The length again to NOT include a line shift added earlier by code
    }
    

    然后我会告诉你如何做其余的事。

    第二种方式

    在此解决方案中,您拥有所有文件及其关联标签的数据库文件。此数据库文件如下所示:

    [filename]:[tags]
    file.txt:tag1, tag2, tag3
    file2.txt:tag4, tag5, tag6
    

    然后程序将以这种方式读取文件名和标签:

    public static void LoadDatabase(string databasePath)
    {
        string[] fileContents;
    
        // End process if database doesn't exist
        if (File.Exists(databasePath))
            return;
    
        fileContents = File.ReadAllLines(databasePath); // Read all lines seperately and put them into an array
    
        foreach (string str in fileContents)
        {
            string fileName = str.Split(':')[0]; // Get the filename
            string tags = str.Split(':')[1]; // Get the tags
    
            // Do what you must with the information
        }
    }
    

    我希望这会有所帮助。