29 #include YFM_YSLib_Service_TextFile
40 CheckUTF8(
const char*
s,
const char*
g)
42 while(s < g && *s != 0
44 return s == g || *s == 0;
49 CheckEncoding(
const char* s,
size_t n)
55 InitializeTextFile(TextFile& tf,
size_t& bl)
60 bl = tf.CheckBOM(tf.Encoding);
65 #define YSL_TXT_CHECK_ENCODING_N 64U
68 #undef YSL_TXT_CHECK_ENCODING_N
73 tf.Encoding = CheckEncoding(s, n);
82 :
File(filename, mode),
85 if(
GetSize() == 0 && mode & std::ios_base::out)
106 InitializeTextFile(*
this, bl);
109 :
File(filename, u
"r"),
112 InitializeTextFile(*
this, bl);
118 const size_t s(GetBOMSize());
119 string str(s,
char());
122 for(
size_t i(0); i !=
s; ++i)
123 str[i] = std::fgetc(GetPtr());
130 using std::char_traits;
138 if(char_traits<char>::compare(tmp,
BOM_UTF_16LE, 2) == 0)
143 if(char_traits<char>::compare(tmp,
BOM_UTF_16BE, 2) == 0)
148 if(char_traits<char>::compare(tmp,
BOM_UTF_8, 3) == 0)
153 if(char_traits<char>::compare(tmp,
BOM_UTF_32LE, 4) == 0)
158 if(char_traits<char>::compare(tmp,
BOM_UTF_32BE, 4) == 0)
167 TextFile::Locate(
u32 pos)
const
169 Seek(bl + pos, SEEK_SET);
181 return File::Truncate(GetBOMSize() + size);
void assign(_tCon &c, _tParams &&...args)
插入参数指定的元素到容器。
TextFile(const char *, std::ios_base::openmode=std::ios_base::in, Text::Encoding=Text::CS_Default)
构造:使用指定文件名、编码和模式初始化文本文件对象。
yconstexpr char BOM_UTF_32LE[]
string GetBOM() const
取 BOM 字符串。
yconstexpr Encoding UTF_16LE(csUTF16LE)
yconstexpr Encoding UTF_16BE(csUTF16BE)
size_t arrlen(_type(&)[_vN])
计算指定数组类型对象的长度。
yconstexpr Encoding UTF_32BE(csUTF32BE)
yconstexpr char BOM_UTF_16LE[]
Unicode 编码模式标记。
GetSize()-GetBOMSize()) DefGetter(const ynothrow
< 取文本区段大小。
YF_API ConversionResult MBCToUC(ucs2_t &, const char *&, Encoding, ConversionState &&={})
按指定编码和转换状态转换字符串中字符为 UCS-2 字符,返回转换的字节数。
yconstexpr char BOM_UTF_32BE[]
#define YSL_TXT_CHECK_ENCODING_N
yconstexpr char BOM_UTF_16BE[]
YSLib 标准字符串(使用 UCS-2 作为内部编码)。
#define yunseq
无序列依赖表达式组求值。
bool Truncate(size_t) const override
截断文本。
yconstexpr char BOM_UTF_8[]
void Rewind() const
设置文件读位置为文本区段头。
yconstexpr Encoding UTF_32LE(csUTF32LE)
yconstexpr Encoding GBK(csGBK)
yconstexpr Encoding UTF_8(csUTF8)