c# - Is there a way to know if a filename is an Excel format? -
my question may seem quite trivial despite numerous research, haven't found answer.
is there way in .net know if filename excel spreadsheet ?
i not interested in specific extension (.xls, .xlsx, etc), know if file excel generic spreadsheet.
long ago, wrote similar here code:
private enum extensions { unknown = 0, docorxls, pdf, jpg, png, docxorxlsx, } private static readonly dictionary<extensions, string> extensionsignature = new dictionary<extensions, string> { {extensions.docorxls, "d0-cf-11-e0-a1-b1-1a-e1"}, {extensions.pdf, "25-50-44-46"}, {extensions.jpg, "ff-d8-ff-e"}, {extensions.png, "89-50-4e-47-0d-0a-1a-0a"}, {extensions.docxorxlsx, "50-4b-03-04-14-00-06-00"} }; private static string getextension(byte[] bytes) { if (bytes.length < 8) return string.empty; var signaturebytes = new byte[8]; array.copy(bytes, signaturebytes, signaturebytes.length); string signature = bitconverter.tostring(signaturebytes); extensions extension = extensionsignature.firstordefault(pair => signature.contains(pair.value)).key; switch (extension) { case extensions.unknown: return string.empty; case extensions.docorxls: if (bytes.length < 512) break; signaturebytes = new byte[4]; array.copy(bytes, 512, signaturebytes, 0, signaturebytes.length); signature = bitconverter.tostring(signaturebytes); if (signature == "ec-a5-c1-00") return ".doc"; return ".xls"; case extensions.pdf: return ".pdf"; case extensions.jpg: return ".jpg"; case extensions.png: return ".png"; case extensions.docxorxlsx: string filebody = encoding.utf8.getstring(bytes); if (filebody.contains("word")) return ".docx"; if (filebody.contains("xl")) return ".xlsx"; break; default: throw new argumentoutofrangeexception(); } return string.empty; }
Comments
Post a Comment