go語言調用everything的SDK接口


介紹

官方SDK地址

  1. 本項目會將官方dll編譯到可執行程序中,運行時無需考慮dll問題。
  2. 根據官方介紹,使用SDK前需要運行everything程序。
  3. 執行go build -tag ASCII時編譯ascii相關接口,否則編譯unicode接口。
  4. 可以參考examples/search.go示例代碼。
  5. 本項目主要是我用來學習window下go調用dll的方法,包含傳參和返回值處理。
  6. 相關代碼大部分都是研究go源碼得到的啟發。
  7. 特別注意,我的代碼里面有幾個使用了go1.17才有的特性。

下面是示例代碼:

package main

import (
	"fmt"
	"os"

	"github.com/jan-bar/es"
)

func main() {
	if len(os.Args) < 2 {
		fmt.Printf("usage:%s test.txt\n", os.Args[0])
		return
	}

	err := es.EverythingSetSearch(os.Args[1])
	if err != nil {
		panic(err)
	}
	err = es.EverythingSetMax(5)
	if err != nil {
		panic(err)
	}

	// 設置好需要查詢的內容,不然后續遍歷時可能報錯
	err = es.EverythingSetRequestFlags(es.EverythingRequestFileName | es.EverythingRequestPath |
		es.EverythingRequestDateCreated | es.EverythingRequestDateModified | es.EverythingRequestDateAccessed |
		es.EverythingRequestSize)
	if err != nil {
		panic(err)
	}

	// 定好排序規則
	err = es.EverythingSetSort(es.EverythingSortDateModifiedAscending)
	if err != nil {
		panic(err)
	}

	// 開始查詢
	fmt.Println("EverythingQuery:", es.EverythingQuery(true))

	// 得到查詢結果個數
	num, err := es.EverythingGetNumResults()
	fmt.Println("EverythingGetNumResults", num, err)

	for i := uint32(0); i < num; i++ {
		fmt.Println("---------------------------------------------------")
		s, err := es.EverythingGetResultSize(i)
		fmt.Printf("FileSize:[%d],%v\n", s, err)
		p, err := es.EverythingGetResultFullPathName(i)
		fmt.Printf("FullPathName:[%s],%v\n", p, err)
		p, err = es.EverythingGetResultFileName(i)
		fmt.Printf("FileName:[%s],%v\n", p, err)
		t, err := es.EverythingGetResultDateCreated(i)
		fmt.Printf("DateCreated:[%s],%v\n", t, err)
		t, err = es.EverythingGetResultDateModified(i)
		fmt.Printf("DateModified:[%s],%v\n", t, err)
		t, err = es.EverythingGetResultDateAccessed(i)
		fmt.Printf("DateAccessed:[%s],%v\n", t, err)
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM