2011-10-13 12 views
19

मुझे ऐसा प्रोग्राम बनाने की ज़रूरत है जो मेरे द्वारा सेट किए गए किसी विशिष्ट गंतव्य में टेक्स्ट फ़ाइल प्रारूप में सहेजा गया पासवर्ड उत्पन्न करता है और उपयोगकर्ता को किसी अन्य प्रोग्राम को 'अनलॉक' करने के लिए पासवर्ड प्राप्त करने के लिए .txt खोलने की आवश्यकता होती है।डेल्फी में एक .txt फ़ाइल में स्ट्रिंग को कैसे सहेजते हैं?

मुझे पहले से ही स्ट्रिंग sPass में पासवर्ड उत्पन्न करने के लिए कोड मिला है और अब मुझे SaveToFile फ़ंक्शन का उपयोग करने के लिए पासवर्ड फ़ाइल में सहेजी गई टेक्स्ट फ़ाइल में सहेजने की आवश्यकता है, लेकिन मुझे सामान्य फॉर्म नहीं मिल रहा है डेल्फी में SaveTo फ़ाइल फ़ंक्शन और मुझे नहीं पता कि फ़ंक्शन में sPass और Password.txt कहां रखा जाए।

ऐसा लगता है कि कुछ किया जाना चाहिए: SaveToFile (...) लेकिन मैं Password.txt में Spaß को बचाने के लिए पता नहीं कैसे

संपादित करें:

बस एक और सवाल, आप कैसे क्या है नष्ट कर सकता हूं पहले स्ट्रिंग जोड़ने से पहले पासवर्ड.txt में पहले संग्रहीत किया गया था ताकि स्ट्रिंग जोड़ने से पहले पासवर्ड.txt खाली हो? धन्यवाद

उत्तर

20

आधुनिक तरीका एक स्ट्रिंगलिस्ट बनाना और फ़ाइल को सहेजना है।

procedure MakeAStringlistAndSaveThat; 
var 
    MyText: TStringlist; 
begin 
    MyText:= TStringlist.create; 
    try 
    MyText.Add('line 1'); 
    MyText.Add('line 2'); 
    MyText.SaveToFile('c:\folder\filename.txt'); 
    finally 
    MyText.Free 
    end; {try} 
end; 

नोट डेल्फी पहले से ही एक संबंधित वर्ग है कि सब कुछ आप चाहते हैं करता है: TInifile।
यह key = 'value' प्रारूप में मान और कुंजी संग्रहीत करता है।

passwordlist:= TInifile.Create; 
try 
    passwordlist.LoadFromFile('c:\folder\passwords.txt'); 
    //Add or replace a password for `user1` 
    passwordlist.WriteString('sectionname','user1','topsecretpassword'); 
    passwordlist.SaveToFile('c:\folder\passwords.txt'); 
finally 
    passwordlist.Free; 
end; {try} 

चेतावनी
ध्यान दें कि एक textfile में unecrypted पासवर्ड सहेजने में सुरक्षा-रिसाव है। हैशफंक्शन का उपयोग करके अपने पासवर्ड को हैश करना बेहतर है, देखें: Password encryption in Delphi
पासवर्ड को सुरक्षित तरीके से सहेजने के तरीकों के लिए युक्तियों के लिए।

+0

के साथ "MyText.SaveToFile ('c: \ फ़ोल्डर \ filename.txt');" , मैं इसका उपयोग नहीं कर सकता क्योंकि मैं यह नहीं समझ सकता कि यह कौन सी निर्देशिका में रहेगा क्योंकि मैं इस पर परीक्षण करने के लिए कई कंप्यूटरों का उपयोग करूँगा और मेरे फ्लैशड्राइव (जिसे मैं इसे संग्रहीत कर रहा हूं) के लिए निर्देशिका प्रत्येक बार अलग-अलग होगी ई एक बार हो, फिर अन्य पीसी पर एफ, फिर जी पर एक और आदि –

+0

तो आपको उस फ़ोल्डर स्थान की जांच करनी होगी जिससे एप्लिकेशन शुरू हो गया है। यह बहुत मुश्किल नहीं होना चाहिए! – Birger

+0

'TIniFile'' TStrings' का वंशज नहीं है। –

13

आप एक फ़ाइल के लिए एक स्ट्रिंग को बचाने के लिए TFileStream वर्ग का उपयोग कर सकते हैं:

uses 
    Classes; 

procedure StrToFile(const FileName, SourceString : string); 
var 
    Stream : TFileStream; 
begin 
    Stream:= TFileStream.Create(FileName, fmCreate); 
    try 
    Stream.WriteBuffer(Pointer(SourceString)^, Length(SourceString)); 
    finally 
    Stream.Free; 
    end; 
end; 

और पढ़ने के लिए

function FileToStr(const FileName : string):string; 
var 
    Stream : TFileStream; 
begin 
    Stream:= TFileStream.Create(FileName, fmOpenRead); 
    try 
    SetLength(Result, Stream.Size); 
    Stream.Position:=0; 
    Stream.ReadBuffer(Pointer(Result)^, Stream.Size); 
    finally 
    Stream.Free; 
    end; 
end; 
+0

अच्छा सहायक कार्य। –

33

आधुनिक आधुनिक तरीका IOUtils में TFile.WriteAllText उपयोग करने के लिए है (डेल्फी 2010 और ऊपर)

प्रक्रिया WriteAllText (कॉन्स्ट पथ: स्ट्रिंग; कॉन्स सामग्री: स्ट्रिंग); अधिभार; स्थिर;

एक नई फ़ाइल बनाता है, फ़ाइल में निर्दिष्ट स्ट्रिंग लिखता है, और फिर फ़ाइल बंद कर देता है। यदि लक्ष्य फ़ाइल पहले से मौजूद है, तो यह अधिलेखित है।

+0

यह बहुत दिलचस्प है, मुझे इस तरह के कार्य से अवगत नहीं था। धन्यवाद! – TridenT

+0

कुछ बग हो सकता है ... https://stackoverflow.com/questions/35708827/what-could-cause-no-mapping-for-the-unicode-character-exists-in-the-target-mult – EMBarbosa

4

सबसे तेज और आसान तरीका, किसी भी चर घोषित करने के लिए कोई जरूरत नहीं:

with TStringList.Create do 
try 
    Add(SomeString); 
    SaveToFile('c:\1.txt'); 
finally 
    Free; 
end; 
+0

यदि फ़ाइल "सी: \ 1.txt" लिखने योग्य नहीं है, आपको एक अपवाद मिलेगा और मुफ़्त निष्पादित नहीं होगा, इसलिए आप अंततः निर्माण का प्रयास करना चाहेंगे। –

+0

सहमत, जोड़ा ** कोशिश करें .. आखिरकार ** ब्लॉक। – TPAKTOPA

+1

स्थानीय वर्रों के लाभ की कमी के मुकाबले ज्यादा बुराई जोड़ती है। -1 – Johan

संबंधित मुद्दे