VB.NET

2010-01-12 13 views
5

का उपयोग कर एक पाठ फ़ाइल में एक विशिष्ट लाइन अधिलेखित करें मैं निम्नलिखित कार्य करने होंगे ये पथ निश्चित रूप से अलग-अलग लंबाई होंगे, इसलिए मुझे उद्धरणों में जो कुछ भी है उसे बदलने या पूरी तरह से लाइन को मिटाने और एक नया प्रवेश करने की आवश्यकता है, लेकिन उसी स्थान पर, दस्तावेज़ के अंत में शामिल नहीं किया गया है।VB.NET

उत्तर

1

, एक स्ट्रिंग में पाठ फ़ाइल पढ़ें प्रत्येक पंक्ति के ऊपर पुनरावृति और देखें कि क्या यह प्रारूप में है:

[Path] = "...." (नियमित अभिव्यक्ति के साथ या बस string.StartsWith("[Path] = ") के साथ)

इस पाश तुम बाहर लेखन किया जाना चाहिए में अन्य सभी लाइनें और जब आप इस [पथ] रेखा पर हों, तो संशोधित एक को मुद्रित करें।

कोड में

तो (क्षमा करें, यह सी # में है):

var reader = File.OpenText("foo.txt"); 
var writer = new StreamWriter("output.txt"); 
string line; 
while ((line=reader.ReadLine()) != null) 
{ 
    if (line.StartsWith("[Path]")) 
     writer.WriteLine("[Path] = \"c:\\that\\other\\newer\\path\\\""); 
    else 
     writer.WriteLine(line); 
} 
निश्चित रूप से

, बंद और StreamReader और StreamWriter निपटाने।

+0

मैं सिर्फ एक ही पाठ फ़ाइल में उत्पादन के लिए StreamWriter उपयोग कर सकते हैं, या क्या आप नई फाइल में हर पंक्ति को दोबारा लिखने के लिए कह रहे हैं तो इसे वापस पुराने नाम दें? – Niphoet

+0

एक ही फ़ाइल में लिखने की कोशिश न करें। यह उस तरह से अधिक सुरक्षित है! आप एक नई फाइल बनाकर और पुराने को ओवरराइट करके लगभग कुछ भी नहीं खो देते हैं। – alex

+0

आप File.Copy ("output.txt", "foo.txt", true) जोड़ सकते हैं; File.Delete ("output.txt"); तो ऐसा लगता है कि मूल फ़ाइल ओवरराइट की गई थी। – Axarydax

1

यहां सौदा है: डिस्क पर फ़ाइलों को संग्रहीत करने के तरीके के कारण, आप को इसके बाद की प्रत्येक पंक्ति को अपडेट किए बिना एक पंक्ति में नहीं लिख सकते हैं।

ऐसा करने के कई तरीके हैं, और आपकी स्थिति के लिए सबसे उपयुक्त यह फ़ाइल के आकार की तरह चीजों पर निर्भर करेगा, क्या आप इसे कई फाइलों पर कर रहे हैं, जहां आप उम्मीद करते हैं कि फ़ाइल में इसे खोजने के लिए, आदि

लेकिन अधिकांश समय मैं जो करना चाहता हूं वह वास्तव में पुरानी फ़ाइल की प्रतिलिपि बनाता है ... इसलिए जब मैं फ़ाइल को ढूंढने की ज़रूरत है तो मुझे बदलने की जरूरत है , मैं यह भी लिख रहा हूं कि मैंने एक नए स्थान पर क्या पढ़ा है। जब मुझे रेखा मिलती है, तो मैं नई जानकारी लिखता हूं। मैं तब तक फ़ाइल के माध्यम से खोजता रहता हूं जब तक कि मैं अंत तक नहीं पहुंच जाता, उस समय मैं दोनों धाराओं को बंद करता हूं, मूल को हटाता हूं, और नया नाम बदलता हूं।

Dim ss() As String 
ss = File.ReadAllLines([path]) 
ss(47) = "c:\that\other\newer\path\" 
File.WriteAllLines([path], ss) 

आप नहीं जानते कि जो लाइन बदलने के लिए, आप इसके लिए सरणी एस एस के माध्यम से खोज सकते हैं:

0

एक त्वरित तरीका readAllLines और WriteAllLines उपयोग करने के लिए है।

3

यदि आप वास्तव में वास्तव में जानते हैं कि आप जिस लाइन को प्रतिस्थापित करना चाहते हैं, वह दिखता है और जो फ़ाइल आप पढ़ रहे हैं वह वास्तव में बड़ी नहीं है, तो आप पुराने स्थान की बजाय नई लाइन जोड़ने के लिए केवल Replace() का उपयोग करने का प्रयास कर सकते हैं:

Dim reader As New StreamReader("foo.txt") 
Dim writer As New StreamWriter("output.txt") 

Dim s = reader.ReadToEnd().Replace("[Path]: C:\oldPath\file.txt", "[Path]: C:\newPath") 
writer.Write(s) 
8

यह चाल

Dim thefile As String = "filepath" 
    Dim lines() As String = System.IO.File.ReadAllLines("filepath") 

    lines(number of line you want to replace) = "write what you want to replace here" 

    System.IO.File.WriteAllLines(filepath, lines) 
+0

क्या यह 'StreamReader' पर बेहतर है, इसके अलावा कम कोड लेता है। मैं इस विधि को अधिक संसाधनों का उपयोग करने की अपेक्षा करूंगा? – MrCalvin

0

सबसे पहले क्या करेंगे एक समारोह का निर्माण लाइन 'एन' का मूल्य देने के लिए:

Public Function daValorConfig(ByVal numValor As Long, ByVal nomeFicheiroINI As String) As String 
    Dim reader As StreamReader = New StreamReader(Application.StartupPath & "\" & nomeFicheiroINI & ".ini") 
    Dim valor As String = "" 
    daValorConfig = "" 
    Dim i As Long = 1 
    Try 
     While i <= numValor 
      valor = reader.ReadLine() 
      i = i + 1 
     End While 
     daValorConfig = valor 
     reader.Close() 
    Catch ex As Exception 
     reader.Close() 
     MessageBox.Show(ex.Message, "Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error) 
     Err.Clear() 
    End Try 
End Function 

फिर एक प्रक्रिया है कि निर्दिष्ट लाइन पर नया मान लिखते निर्माण या पुराने एक रख यदि पंक्ति एक आपके द्वारा निर्दिष्ट नहीं है:

Public Sub guardaValorConfig(ByVal dados As String, ByVal numValor As Long, ByVal nomeFicheiroINI As String) 

    Dim writer As StreamWriter = New StreamWriter(Application.StartupPath & "\" & nomeFicheiroINI & ".ini") 
    Dim valor As String = "" 
    Dim i As Long = 1 
    Try 
     While i <= numValor 
      If i = numValor Then 
       writer.Write(dados) 
      Else 
       writer.Write(daValorConfig(i, nomeFicheiroINI)) 
      End If 
      i = i + 1 
     End While 
     writer.Close() 
    Catch ex As Exception 
     MessageBox.Show(ex.Message, "Error: ", MessageBoxButtons.OK, MessageBoxIcon.Error) 
     Err.Clear() 
    End Try 
End Sub