डेल्फी 7 से डेल्फी 2010 तक कुछ कोड पोर्ट करते समय मैं अपने लोडटेक्स्टफ्रोफाइल() फ़ंक्शन को फिर से लिख रहा था।क्या डेल्फी 2010 में LoadTextFromFile फ़ंक्शन है?
function LoadTextFromFile(const aFullFileName: string): string;
var
lBuffer: TBytes;
lEncoding: TEncoding;
lFileStream: TFileStream;
lSize: Integer;
begin
if not FileExists(aFullFileName) then
begin
raise Exception.Create('File "' + aFullFileName + '" not found.');
end;
lFileStream := TFileStream.Create(aFullFileName, fmOpenRead + fmShareDenyNone);
try
if lFileStream.Size <= 0 then
begin
Result := '';
end
else
begin
lSize := lFileStream.Size - lFileStream.Position;
SetLength(lBuffer, lSize);
// Read file into TBytes buffer
lFileStream.Read(lBuffer[0], lSize);
// Read encoding from buffer
TEncoding.GetBufferEncoding(lBuffer, lEncoding);
// Get string from buffer
Result := lEncoding.GetString(lBuffer);
end;
finally
lFileStream.Free;
end;
end;
जब कोई विचार मेरे सिर पर टक्कर मार रहा था: मानक पुस्तकालय में ऐसा कुछ होना चाहिए। कई उपयोगकर्ता एक स्ट्रिंग में एक टेक्स्ट फ़ाइल पढ़ना चाहते हैं, लेकिन मुझे ऐसा मानक फ़ंक्शन नहीं मिला। मैं सबसे नज़दीक आया था पाठ लोड करने के लिए TStringlist का उपयोग कर रहा था। लेकिन ए) एक टीस्ट्रिंगलिस्ट बनाना अनावश्यक दिखता है और बी) मैं टीस्ट्रिंगलिस्ट से ओवरहेड पीड़ित नहीं करना चाहता हूं।
प्रश्न: क्या डेल्फी 2010 में मानक लोडटेक्स्टफ्रोफाइल फ़ंक्शन है?
यहां तक कि डेल्फी 7 में, आप नहीं था कि सभी करते हैं। 'TFileStream' के बजाय' TStringStream' का उपयोग करें, और मार्को के उत्तर का उपयोग करें। साथ ही, मैं उत्सुक हूं: आपने कभी भी पाया है कि 'स्थिति' संपत्ति स्ट्रीम बनाने के तुरंत बाद शून्य नहीं थी, जैसे कि 'lSize' की गणना करने के लिए आपको इसे' आकार 'से घटा देना होगा? –
हाय रॉब, डेल्फी 7 में मुझे यूटीएफ 8 फाइलों को लोड/सहेजने में सक्षम होना था। और सबसे महत्वपूर्ण बात यह है कि मुझे टीस्ट्रिंगस्ट्रीम के बारे में पता नहीं था। स्थिति को वहां होने की आवश्यकता नहीं है। ऐसा इसलिए है क्योंकि मैंने TStrings.Loadfromstream विधि से कुछ कोड कॉपी किया है जिसमें इसकी स्थिति है। मेरे कोड में एक और बग भी है क्योंकि यह बीओएम के साथ फाइलों को संभाल नहीं करता है। तो कोई भी मेरे उदाहरण का उपयोग करने के बारे में सोच रहा है: नहीं। इसके बजाय TFile.ReadAllText का उपयोग करें। –