Schrijven naar bestand

Status
Niet open voor verdere reacties.

007baske007

Gebruiker
Lid geworden
9 jan 2008
Berichten
102
Hallo,

Ik heb een .cfg file van een gameserver, waar de ip adressen in staan die gebanned zijn. nu wil ik een programmatije schrijven, waarmee ik een ip adres kan toevoegen, achter de regel ipbans. De ban moet een temp ban zijn dus ik het kort:
progje die ipadressen schrijft en weghaalt uit een cfg file, dus een programma, ik zet in een textbox een ip adres, ik zet in een andere textbox het aantal minuten hoelang de ban duurt, en dan moet hij hem toevoegen en na bijvoorbeeld 60 minuten verwijderen, als deze zo ingesteld is. Hier het stukje uit de cfg wat ik bedoel:

Code:
cg_currentSelectedPlayerName ""
seta cg_cameraOrbitDelay "50"
seta cg_smoothClients "0"
seta cg_noProjectileTrail "0"
seta cg_damageindicator "1.5"
seta cg_tracerChance "0.5"
seta cg_animBlend "1"
seta cg_automap_x "485"
seta cg_automap_y "5"
seta cg_automap_w "150"
seta cg_automap_h "150"
seta cg_automap_a "0.75"
seta cg_drawRadar "2"
seta cg_drawTeamScores "1"
seta cg_voiceRadio "1"
seta cg_voiceGlobal "1"
seta cg_soundGlobal "1"
seta cg_soundFrag "1"
seta team_identity "prometheus1"
seta outfitting "DABDA"
seta fx_debug "0"
seta fx_countScale "1"
seta fx_nearCull "0"
seta developer "0"
seta logfile "2"
seta r_colorMipLevels "0"
seta r_fullbright "0"
seta r_nocurves "0"
seta r_lightmap "0"
seta r_shownormals "0"
seta pmove_fixed "0"
seta pmove_msec "8"
seta cg_thirdPerson "0"
seta g_banIPs "88.159.114.113 "

de ip adressen moeten dus achter g_banips staan, zoals boven vermeld, 88.159.114.113 gebanned.

Lang verhaal, ik hoop dat iemand mij kan helpen...

Bedankt, Bas
 
ipadressen gescheiden door wat? Een komma of een spatie ofzo?

seta g_banIPs "88.159.114.113 "
 
ipadressen gescheiden door wat? Een komma of een spatie ofzo?

seta g_banIPs "88.159.114.113 "

ta g_allowVote "1"
seta g_filterBan "1"
seta g_banIPs "88.159.114.113 88.159.114.114 "
seta g_logHits "

zo dus:P

Ik hoop dat iemand kan helpen...

Bas
 
Ik zou sowieso niet in het "orginele" cfg bestand gaan editen
nu weet ik niet voor welke game dit is maar waarschijnlijk kun je wel meerdere cfg's achter elkaar laden.

dan kun je een cfg bestandje maken met puur en alleen de "seta g_banIPs" instructie erin.
het voordeel is ook dat je die cfg dan waarschijnlijk wel periodiek kan runnen zonder dat je je hele server config weer moet runnen

ten 2e is het van belang dat we weten op welk besturingssysteem het cfg'te gegenereerd moet worden. (je post hem in het vb topic maar moet het ook op een windows bak gegenereerd worden?
 
Ik zou sowieso niet in het "orginele" cfg bestand gaan editen
nu weet ik niet voor welke game dit is maar waarschijnlijk kun je wel meerdere cfg's achter elkaar laden.

dan kun je een cfg bestandje maken met puur en alleen de "seta g_banIPs" instructie erin.
het voordeel is ook dat je die cfg dan waarschijnlijk wel periodiek kan runnen zonder dat je je hele server config weer moet runnen

ten 2e is het van belang dat we weten op welk besturingssysteem het cfg'te gegenereerd moet worden. (je post hem in het vb topic maar moet het ook op een windows bak gegenereerd worden?

dit gaat me allemaal iets te snel, het is windows, het is mijn eigen server.
de game: sof2 demo

ik hoop dat je kan helpen

Bas
 
Kun je bij Sof 2 meerdere cfg bestanden achter elkaar inladen?

Dan splits je namelijk het grote cfg bestand wat je nu hebt in
"banip.cfg" voor de ip adessen die je wil bannen en een "server.cfg" voor alle andere instellingen

hier alvast wat info opver bestanden maken/verwijderen/aanpassen dmv VBScripting
http://www.activexperts.com/activmonitor/windowsmanagement/adminscripts/other/textfiles/
ja, ik kan een aparte cfg maken, die ik dan laad met exec bans.cfg ofzo...
kan jij mij de source misschien opsturen? ik ben er nog steeds niet uit...

Bas
 
Ben ff een aan het coden voor je geweest :

zet eens 2 textboxxen , een listbox en een button op een form
gebruik dan onderstaande code. Het is een schot in de goede richting.

Code:
Public Class Form1

    Public WithEvents t As New Timer
    Public dict As New System.Collections.Generic.Dictionary(Of String, Date)
    Public timerArray As New ArrayList

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        t.Enabled = True
        t.Interval = 1000

        TextBox1.Text = "[Een IP adres]"
        TextBox2.Text = "[Ban timeout]"
        Button1.Text = "Toevoegen"
        ListBox1.Items.Clear()

    End Sub

    Private Sub t_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t.Tick

        For Each item In dict
            If item.Value <= Now() Then
                dict.Remove(item.Key)
                Call WriteLine()
                Exit For
            Else
                ListBox1.Items.Clear()
                For Each item2 In dict
                    ListBox1.Items.Add(item2.Key.ToString & " (" & CInt((item2.Value).Subtract(Now()).TotalSeconds) & ")")
                Next
            End If
        Next

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        dict.Add(TextBox1.Text, Now().AddSeconds(CDbl(TextBox2.Text)))
        ListBox1.Items.Add(TextBox1.Text & " (" & CDbl(TextBox2.Text) & ")")
        Call WriteLine()

    End Sub

    Private Sub WriteLine()

        Dim setbanip As New System.Text.StringBuilder
        setbanip.Append("seta g_banIPs " & Chr(34))

        For Each item In dict
            setbanip.Append(item.Key.ToString & Chr(32))
        Next

        setbanip.Append(Chr(34))
        Debug.Print(setbanip.ToString)

    End Sub

End Class

Zie in je immediate window hoe de regel steeds wordt aangepast als een ban is afgelopen.
Je zal zelf even moeten kijken hoe je die aangemaakte regel dan in de cfg file terugzet.
 
Laatst bewerkt:
Ben ff een aan het coden voor je geweest :

zet eens 2 textboxxen , een listbox en een button op een form
gebruik dan onderstaande code. Het is een schot in de goede richting.

Code:
Public Class Form1

    Public WithEvents t As New Timer
    Public dict As New System.Collections.Generic.Dictionary(Of String, Date)
    Public timerArray As New ArrayList

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        t.Enabled = True
        t.Interval = 1000

        TextBox1.Text = "[Een IP adres]"
        TextBox2.Text = "[Ban timeout]"
        Button1.Text = "Toevoegen"
        ListBox1.Items.Clear()

    End Sub

    Private Sub t_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t.Tick

        For Each item In dict
            If item.Value <= Now() Then
                dict.Remove(item.Key)
                Call WriteLine()
                Exit For
            Else
                ListBox1.Items.Clear()
                For Each item2 In dict
                    ListBox1.Items.Add(item2.Key.ToString & " (" & CInt((item2.Value).Subtract(Now()).TotalSeconds) & ")")
                Next
            End If
        Next

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        dict.Add(TextBox1.Text, Now().AddSeconds(CDbl(TextBox2.Text)))
        ListBox1.Items.Add(TextBox1.Text & " (" & CDbl(TextBox2.Text) & ")")
        Call WriteLine()

    End Sub

    Private Sub WriteLine()

        Dim setbanip As New System.Text.StringBuilder
        setbanip.Append("seta g_banIPs " & Chr(34))

        For Each item In dict
            setbanip.Append(item.Key.ToString & Chr(32))
        Next

        setbanip.Append(Chr(34))
        Debug.Print(setbanip.ToString)

    End Sub

End Class

Zie in je immediate window hoe de regel steeds wordt aangepast als een ban is afgelopen.
Je zal zelf even moeten kijken hoe je die aangemaakte regel dan in de cfg file terugzet.

Hallo, bedankt!
Dit werkt, alleen is het nu in secondes, kan je er minuten van maken? en als ik dit programmatje in de map zet waar ook bans.cfg inzit, hoe schrijf ik deze dan naar de cfg? en als hij aftelt, blijft hij bij 1 hangen, weet niet of dit de bedoeling is? de cfg ziet er als volgt uit:
g_banips "XX.XXX.XXX.XXX XX.XXX.XXX.XXX"
g_banIPs "88.159.114.113 88.159.114.114"
dus de ips worden gescheiden door een spatie.
Bedankt nogmaals!

Bas
 
Laatst bewerkt:
Ja hallooo! Moet ik het hele programma voor je gaan schrijven ofzo?!!

Ik vind dat ik al genoeg heb gedaan , je mag zelf ook nog wel met iets komen.

Code:
t.Interval = [B]60000[/B]

Code:
dict.Add(TextBox1.Text, Now().[B]AddMinutes[/B](CDbl(TextBox2.Text)))

en

Code:
ListBox1.Items.Add(item2.Key.ToString & " (" & CInt((item2.Value).Subtract(Now()).[B]TotalMinutes[/B]) & ")")
 
He spijt me, ik ben beginner, en ik heb dit programma egt nodig...:S
Ik heb ik mijn boek zitten kijken over visual basic, maar er staat niks in over het schrijven en weghalen van die bestanden
Dus nu alleen nog het gedeelte dat hij het schrijft naar de cfg...Het spijt me egt, maar ik zou echt niet weten hoe het moet...:S

Pls,
Bas
 
Nou ok dan,
maar gebruik dan wel de debug functie (F8 en F9) een keer , ander snap je het nooit.

Code:
Public Class Form1

    Public WithEvents t As New Timer
    Public dict As New System.Collections.Generic.Dictionary(Of String, Date)
    Public timerArray As New ArrayList

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        t.Enabled = True
        t.Interval = 60000

        TextBox1.Text = "[Een IP adres]"
        TextBox2.Text = "[Ban timeout]"
        Button1.Text = "Toevoegen"
        ListBox1.Items.Clear()

    End Sub

    Private Sub t_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles t.Tick

        For Each item In dict
            If item.Value <= Now() Then
                dict.Remove(item.Key)
                Call RefreshListBox()
                Call MakeBanLine()
                Exit For
            End If
            Call RefreshListBox()
        Next

    End Sub

    Private Sub RefreshListBox()
        ListBox1.Items.Clear()
        For Each item2 In dict
            ListBox1.Items.Add(item2.Key.ToString & " (" & CInt((item2.Value).Subtract(Now()).TotalMinutes) & ")")
        Next
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        dict.Add(TextBox1.Text, Now().AddMinutes(CDbl(TextBox2.Text) - 1))
        ListBox1.Items.Add(TextBox1.Text & " (" & CDbl(TextBox2.Text) - 1 & ")")
        Call MakeBanLine()

    End Sub

    Private Sub MakeBanLine()

        Dim setbanip As New System.Text.StringBuilder
        setbanip.Append("seta g_banIPs " & Chr(34))

        For Each item In dict
            setbanip.Append(item.Key.ToString & Chr(32))
        Next

        setbanip.Append(Chr(34))
        MakeConfigFile(setbanip.ToString)

    End Sub

    Private Sub MakeConfigFile(ByVal setbanip As String)

        Dim Filename As String = "c:\temp\Xtestfile.cfg"

        Dim tr As System.IO.TextReader = New System.IO.StreamReader(Filename)

        Dim configfile As New System.Text.StringBuilder

        Do While tr.Peek <> -1

            Dim ReadLine As String = tr.ReadLine

            If ReadLine.StartsWith("seta g_banIPs ") = True Then
                configfile.AppendLine(setbanip)
            Else
                configfile.AppendLine(ReadLine)
            End If

        Loop

        tr.Dispose()
        tr.Close()

        Dim tw As System.IO.TextWriter = New System.IO.StreamWriter(Filename)
        tw.Write(configfile.ToString)
        tw.Flush()
        tw.Dispose()
        tw.Close()

    End Sub


End Class
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan