| OLD | NEW |
| (Empty) |
| 1 // Common/ListFileUtils.cpp | |
| 2 | |
| 3 #include "StdAfx.h" | |
| 4 | |
| 5 #include "MyWindows.h" | |
| 6 #include "../Windows/FileIO.h" | |
| 7 | |
| 8 #include "ListFileUtils.h" | |
| 9 #include "StringConvert.h" | |
| 10 #include "UTFConvert.h" | |
| 11 | |
| 12 static const char kQuoteChar = '\"'; | |
| 13 static void RemoveQuote(UString &s) | |
| 14 { | |
| 15 if (s.Length() >= 2) | |
| 16 if (s[0] == kQuoteChar && s[s.Length() - 1] == kQuoteChar) | |
| 17 s = s.Mid(1, s.Length() - 2); | |
| 18 } | |
| 19 | |
| 20 bool ReadNamesFromListFile(LPCWSTR fileName, UStringVector &resultStrings, UINT
codePage) | |
| 21 { | |
| 22 NWindows::NFile::NIO::CInFile file; | |
| 23 if (!file.Open(fileName)) | |
| 24 return false; | |
| 25 UInt64 length; | |
| 26 if (!file.GetLength(length)) | |
| 27 return false; | |
| 28 if (length > ((UInt32)1 << 31)) | |
| 29 return false; | |
| 30 AString s; | |
| 31 char *p = s.GetBuffer((int)length + 1); | |
| 32 UInt32 processed; | |
| 33 if (!file.Read(p, (UInt32)length, processed)) | |
| 34 return false; | |
| 35 p[(UInt32)length] = 0; | |
| 36 s.ReleaseBuffer(); | |
| 37 file.Close(); | |
| 38 | |
| 39 UString u; | |
| 40 #ifdef CP_UTF8 | |
| 41 if (codePage == CP_UTF8) | |
| 42 { | |
| 43 if (!ConvertUTF8ToUnicode(s, u)) | |
| 44 return false; | |
| 45 } | |
| 46 else | |
| 47 #endif | |
| 48 u = MultiByteToUnicodeString(s, codePage); | |
| 49 if (!u.IsEmpty()) | |
| 50 { | |
| 51 if (u[0] == 0xFEFF) | |
| 52 u.Delete(0); | |
| 53 } | |
| 54 | |
| 55 UString t; | |
| 56 for (int i = 0; i < u.Length(); i++) | |
| 57 { | |
| 58 wchar_t c = u[i]; | |
| 59 if (c == L'\n' || c == 0xD) | |
| 60 { | |
| 61 t.Trim(); | |
| 62 RemoveQuote(t); | |
| 63 if (!t.IsEmpty()) | |
| 64 resultStrings.Add(t); | |
| 65 t.Empty(); | |
| 66 } | |
| 67 else | |
| 68 t += c; | |
| 69 } | |
| 70 t.Trim(); | |
| 71 RemoveQuote(t); | |
| 72 if (!t.IsEmpty()) | |
| 73 resultStrings.Add(t); | |
| 74 return true; | |
| 75 } | |
| OLD | NEW |