Vairāk

Kā noteikt SDF faila versiju?

Kā noteikt SDF faila versiju?


Es meklēju rīku vai metodi, lai droši noteiktu, kuru SDF versiju konkrētais fails īsteno.

Līdz šim esmu izmantojis Autodesk SDF ielādētāju ar /info karodziņu, taču tas atbalsta tikai SDFv2.

Diemžēl man ir liels skaits dažādu versiju SDF failu, kur man ir jānosaka, kuri no tiem ir jājaunina uz SDFv3. Tā kā FDO Toolbox atbalsta tikai SDFv3, un mēs jauninām no MapGuide 6.5, kas atbalsta tikai SDFv2.

Tātad kopsavilkumā es meklēju uzticamu veidu, kā, iespējams, vienā rīkā noteikt SDF faila galveno un mazo versijas numuru. (Es zinu FME, atstājot to kā pēdējo līdzekli izmaksu dēļ)


Mēģinot izveidot savienojumu ar SDF <3.0 failu, izmantojot FDO, SDF nodrošinātājs izmetīs izņēmumu ar konkrētu ziņojumu (šķiet, ka SDF fails ir versija 2.1 vai vecāka. Lūdzu, konvertējiet uz SDF 3. versiju)

Tāpēc neglīts, bet praktiski realizējams risinājums ir C#izmantot šādu loģiku:

mēģiniet {// Mēģiniet izveidot savienojumu, izmantojot FDO. Ja jūs varat atvērt/aizvērt bez izņēmumiem, tas ir derīgs SDF3 fails} (OSGeo.FDO.Common.Exception ex) {if (ex.Message == "SDF fails, šķiet, ir versija 2.1 vai vecāka. Lūdzu, konvertējiet uz SDF versiju 3 ") {// Mēģiniet izmantot SDF ielādētāju. Ja jūs varat atvērt/aizvērt bez kļūdām, tas ir derīgs SDFv2 fails}}

Papildus Džekija teiktajam:

Arī no FDO varat nedaudz pārbaudīt SDF faila pirmos baitus. Tas nav garantēts, taču tam vajadzētu būt diezgan uzticamam, it īpaši, ja šo SDF failu izveidošanai esat izmantojis tikai vienu rīku. Varbūt tas ir vieglāk, jo tas ir diezgan savrups (nav atkarīgs no FDO), un jūs varat to rakstīt gandrīz jebkurā valodā.

No FDO koda:

// kamēr fails ir atvērts, pārbaudiet, vai tas ir // vecāks SDF (2.1 vai vecāks), izlasot pirmos baitus. // tas viss tiek darīts mazā endianā. neparakstīta gara vērtība; fread (& vērtība, izmērs (neparakstīts garš), 1, f); fcose (f); if ((vērtība & 0x0000ffff) == 0x00002c00) {// 2.x versijas // Var ietvert arī 1.0, taču netiek garantēts, ka tas būs vecs SDF, jo citiem binārajiem failiem // var būt tādi paši sākotnējie baiti // Ņemiet vērā, ka SDF3 (SQLite) failiem pirmie 4 DWORDS ir: // value [0] == 0x00000000 // value [1] == 0x00000001 // value [2] == 0x00000000 // value [3] == 0x00053162 // Bet no šī brīža pareizais veids, kā pārbaudīt versiju, ir // atvērt shēmas datu bāzi un nolasīt versijas numuru, ko // mēs darām vēlāk šajā funkcijā. mest…}

FDO v3.6.0: OpenSource_FDO/Providers/SDF/Src/Provider/SdfConnection.cpp līnija: 285


Varat pārbaudīt faila pirmos baitus. Ja tie satur "SQLITE", jums ir darīšana ar v3.