Thread View: pl.comp.lang.pascal
22 messages
22 total messages
Started by Terrmit
Sun, 18 Apr 2010 14:30
[Lazarus] Czy nazwa pliku jest poprawna?
Author: Terrmit
Date: Sun, 18 Apr 2010 14:30
Date: Sun, 18 Apr 2010 14:30
13 lines
1306 bytes
1306 bytes
Witam, Może ktoś mi podpowie. Potrzeba mi funkcja, która sprawdza, czy w podana nazwa pliku (katalogu) jest poprawna, tzn. czy nie zawiera niedozwolonych znaków (\ /: * ? " < > |). Czy we freepascalu istnieje taka funkcja? Pytam, bo nie mogę takiej znaleźć. Mogę sobie oczywiście napisać, ale jeśli taka funkcja jest to wolałbym ją wykorzystać, a nie wyważać otwarte drzwi. Jakoś nie chce mi się wierzyć, że nie ma takiego sprawdzania. Sławek
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Grzegorz Skoczylas
Date: Sun, 18 Apr 2010 17:03
Date: Sun, 18 Apr 2010 17:03
22 lines
1743 bytes
1743 bytes
W dniu 2010-04-18 16:30, Terrmit pisze: > Witam, > > Może ktoś mi podpowie. > Potrzeba mi funkcja, która sprawdza, czy w podana nazwa > pliku (katalogu) jest poprawna, tzn. czy nie zawiera > niedozwolonych znaków (\ /: * ? " < > |). > Czy we freepascalu istnieje taka funkcja? > Pytam, bo nie mogę takiej znaleźć. > Mogę sobie oczywiście napisać, ale jeśli taka funkcja jest > to wolałbym ją wykorzystać, a nie wyważać otwarte drzwi. > Jakoś nie chce mi się wierzyć, że nie ma takiego sprawdzania. W Delphi w module SysUtils jest funkcja "IsValidIdent". Sprawdź, czy Lazarus też ma taką funkcję w tym module. -- Pozdrawiam, Grzegorz Skoczylas http://gskoczylas.rekord.pl ----------------------------------------------
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Terrmit
Date: Sun, 18 Apr 2010 19:37
Date: Sun, 18 Apr 2010 19:37
28 lines
2139 bytes
2139 bytes
W dniu 18.04.2010 19:03, Grzegorz Skoczylas pisze: > W dniu 2010-04-18 16:30, Terrmit pisze: >> Witam, >> >> Może ktoś mi podpowie. >> Potrzeba mi funkcja, która sprawdza, czy w podana nazwa >> pliku (katalogu) jest poprawna, tzn. czy nie zawiera >> niedozwolonych znaków (\ /: * ? " < > |). >> Czy we freepascalu istnieje taka funkcja? >> Pytam, bo nie mogę takiej znaleźć. >> Mogę sobie oczywiście napisać, ale jeśli taka funkcja jest >> to wolałbym ją wykorzystać, a nie wyważać otwarte drzwi. >> Jakoś nie chce mi się wierzyć, że nie ma takiego sprawdzania. > > W Delphi w module SysUtils jest funkcja "IsValidIdent". Sprawdź, czy > Lazarus też ma taką funkcję w tym module. > Jest taka funkcja, ale ona służy raczej do sprawdzania nazwy komponentu: "IsValidIdent returns True if Ident can be used as a component name." http://lazarus-ccr.sourceforge.net/docs/rtl/sysutils/isvalidident.html Owszem taka nazwa nadawałaby się też na nazwę pliku, ale gdy będzie zawierać np. nawiasy, to już wyrzuci False, więc chyba nie o to chodzi, bo w nazwach plików nawiasy jak najbardziej mogą być. Jednak dzięki za odpowiedź i zainteresowanie. Sławek
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Grzegorz Skoczylas
Date: Mon, 19 Apr 2010 17:51
Date: Mon, 19 Apr 2010 17:51
76 lines
3585 bytes
3585 bytes
W dniu 2010-04-18 21:37, Terrmit pisze:
> W dniu 18.04.2010 19:03, Grzegorz Skoczylas pisze:
>> W dniu 2010-04-18 16:30, Terrmit pisze:
>>> Witam,
>>>
>>> Może ktoś mi podpowie.
>>> Potrzeba mi funkcja, która sprawdza, czy w podana nazwa
>>> pliku (katalogu) jest poprawna, tzn. czy nie zawiera
>>> niedozwolonych znaków (\ /: * ? " < > |).
>>> Czy we freepascalu istnieje taka funkcja?
>>> Pytam, bo nie mogę takiej znaleźć.
>>> Mogę sobie oczywiście napisać, ale jeśli taka funkcja jest
>>> to wolałbym ją wykorzystać, a nie wyważać otwarte drzwi.
>>> Jakoś nie chce mi się wierzyć, że nie ma takiego sprawdzania.
>>
>> W Delphi w module SysUtils jest funkcja "IsValidIdent". Sprawdź, czy
>> Lazarus też ma taką funkcję w tym module.
>>
> Jest taka funkcja, ale ona służy raczej do sprawdzania nazwy
> komponentu [...]
Faktycznie. Pomyliłem się.
W JEDI znalazłem taką funkcję:
function ValidFileName(const FileName: string): Boolean;
function HasAny(const Str, Substr: string): Boolean;
var
I: Integer;
begin
Result := False;
for I := 1 to Length(Substr) do
begin
if Pos(Substr[I], Str) > 0 then
begin
Result := True;
Break;
end;
end;
end;
begin
Result := (FileName <> '') and (not HasAny(FileName, '/<>"?*|'));
if Result then
Result := Pos('\', ExtractFileName(FileName)) = 0;
end;
To oczywiście dotyczy systemu Windows. Właściwie należałoby jeszcze
sprawdzić, czy pełna ścieżka do pliku nie przekracza 260 znaków (w
Delphi stała MAX_PATH z modułu Windows).
Nie wiem, jakie są ograniczenia w Linux czy MacOS-X.
Jeżeli miałoby to być niezależnie od systemu, to można do tego podejść
może niezbyt optymalnie, ale za to chyba niezawodnie:
1. Sprawdzić, czy taki plik już istnieje. Jeżeli istnieje - to jest
poprawna nazwa pliku.
2. Spróbować utworzyć taki plik. Jeżeli się uda, to nazwa jest poprawna,
a utworzony plik usunąć z dysku. Jeżeli się nie uda, to nazwa nie jest
poprawna.
Powyższy algorytm będzie działać w folderach, do których aplikacja ma
pełne prawa. Nie zadziała np. w folderze "c:\Program Files" lub
"c:\Windows" w Windows Vista i późniejszych. Może też nie zadziałać w
przypadku dysków sieciowych, do których aplikacja (użytkownik) nie ma
pełnych praw.
--
Pozdrawiam,
Grzegorz Skoczylas
http://gskoczylas.rekord.pl
----------------------------------------------
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Terrmit
Date: Mon, 19 Apr 2010 21:35
Date: Mon, 19 Apr 2010 21:35
80 lines
3561 bytes
3561 bytes
W dniu 19.04.2010 19:51, Grzegorz Skoczylas pisze:
[ciach]
>
> Faktycznie. Pomyliłem się.
>
> W JEDI znalazłem taką funkcję:
>
> function ValidFileName(const FileName: string): Boolean;
>
> function HasAny(const Str, Substr: string): Boolean;
> var
> I: Integer;
> begin
> Result := False;
> for I := 1 to Length(Substr) do
> begin
> if Pos(Substr[I], Str) > 0 then
> begin
> Result := True;
> Break;
> end;
> end;
> end;
>
> begin
> Result := (FileName <> '') and (not HasAny(FileName, '/<>"?*|'));
> if Result then
> Result := Pos('\', ExtractFileName(FileName)) = 0;
> end;
>
>
> To oczywiście dotyczy systemu Windows. Właściwie należałoby jeszcze
> sprawdzić, czy pełna ścieżka do pliku nie przekracza 260 znaków (w
> Delphi stała MAX_PATH z modułu Windows).
>
> Nie wiem, jakie są ograniczenia w Linux czy MacOS-X.
>
> Jeżeli miałoby to być niezależnie od systemu, to można do tego podejść
> może niezbyt optymalnie, ale za to chyba niezawodnie:
>
> 1. Sprawdzić, czy taki plik już istnieje. Jeżeli istnieje - to jest
> poprawna nazwa pliku.
> 2. Spróbować utworzyć taki plik. Jeżeli się uda, to nazwa jest poprawna,
> a utworzony plik usunąć z dysku. Jeżeli się nie uda, to nazwa nie jest
> poprawna.
>
> Powyższy algorytm będzie działać w folderach, do których aplikacja ma
> pełne prawa. Nie zadziała np. w folderze "c:\Program Files" lub
> "c:\Windows" w Windows Vista i późniejszych. Może też nie zadziałać w
> przypadku dysków sieciowych, do których aplikacja (użytkownik) nie ma
> pełnych praw.
>
Właściwie to już napisałem sobie podobnie działającą funkcję jak
ta ValidFileName, którą przytoczyłeś, choć jest trochę prostsza,
bo wyskrobałem ją na szybko:
function NazwaPoprawna(const FileOrDir: string): Boolean;
var i: Integer;
const NOCHAR = ['\','/',':','*','?','"','<','>','|'];
begin
Result := True;
for i := 1 to Length(FileOrDir) do
if FileOrDir[i] in NOCHAR then begin
Result := False; Break;
end;
end;
Nie jestem pewien, czy to zadziała, gdy w nazwie trafią się
np. polskie literki. Chyba muszę przetestować.
Program ma działać przede wszystkim w Linuksie, ale chciałbym
aby w przyszłości można go było uruchamiać także w Windows.
Metoda z tworzeniem pliku jest chyba najpewniejsza, ale przypomina
nieco sięganie prawą ręką do lewego ucha, czego wolałbym uniknąć.
I sprawdzenie długość faktycznie nie zaszkodziłoby.
Dzięki za wskazówki,
Sławek
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 20 Apr 2010 06:20
Date: Tue, 20 Apr 2010 06:20
17 lines
1781 bytes
1781 bytes
On Mon, 19 Apr 2010 23:35:42 +0200, Terrmit wrote: > Nie jestem pewien, czy to zadziała, gdy w nazwie trafią się > np. polskie literki. Chyba muszę przetestować. NTFS i wszystkie znane mi filesystemy(ext2/3 & reiserfs) *nixowe obsługują polskie diakrytyki bez problemu. Jak znam życie, będą najwyżej problemy z aktualna stroną kodową konsoli xD. Lub też z brakiem obsługi unicode w fpc[to się nadal nie zmieniło?] - więc do stringa sensownie nie upchniesz katakany :). -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/ ICQ: 148498663 GG: 2544385 AIM: malyzgora GTalk: l3vi4than@gmail.com ASTRA: L3viathan
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Wiktor S.
Date: Tue, 20 Apr 2010 18:09
Date: Tue, 20 Apr 2010 18:09
24 lines
1776 bytes
1776 bytes
> Lub też z brakiem obsługi unicode w fpc[to się nadal nie zmieniło?] > - więc do stringa sensownie nie upchniesz katakany :). FPC obsługuje widestringi i unicodestringi, ale - plik źródłowy nie może być w UTF-16 - plik źródłowy może być w UTF-8, ale kompilator niestety nie zdekoduje znaków, więc przypisanie var s:unicodestring; s:='カタカナ'; nie da tego co powinno (s będzie zawierało 'カタカăŠ'). Jedyne co się da to s:=#12459#12479#12459#12490; - writeln tego na konsoli nie wyświetli. Nawet unicodestringa z polskimi literami prawidłowo nie wyświetla, gdyż przeprowadza konwersję na stronę kodową ANSI zamiast OEM. -- Azarien
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Łukasz 'Maly' Ostrowski
Date: Tue, 20 Apr 2010 18:30
Date: Tue, 20 Apr 2010 18:30
33 lines
2145 bytes
2145 bytes
On Tue, 20 Apr 2010 20:09:30 +0200, Wiktor S. wrote: > FPC obsługuje widestringi i unicodestringi, ale > > - plik źródłowy nie może być w UTF-16 > - plik źródłowy może być w UTF-8, ale kompilator niestety nie zdekoduje > znaków, więc przypisanie > > var s:unicodestring; > s:='カタカナ'; Explicit deklaracja zmiennej "unicodestring" nie jest dla mnie obsługą Unicode/UTF-8/etc ;-). string z .NET/String z Javy jest ;-). OP ma za dużo naleciałości czasowych. > nie da tego co powinno (s będzie zawierało 'カタカăŠ'). Jedyne co się > da to > > s:=#12459#12479#12459#12490; Kombinowanie, hacki i okolice, to też nie jest Unicode :). > - writeln tego na konsoli nie wyświetli. Nawet unicodestringa z polskimi > literami prawidłowo nie wyświetla, gdyż przeprowadza konwersję na stronę > kodową ANSI zamiast OEM. Noo własnie, to tylko kontynuacja poprzednij punktów. =]. Obsługuje ale... nie :). -- Pozdrawiam, Łukasz 'Maly' Ostrowski. http://l3v.pl/ ICQ: 148498663 GG: 2544385 AIM: malyzgora GTalk: l3vi4than@gmail.com ASTRA: L3viathan
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Terrmit
Date: Tue, 20 Apr 2010 19:27
Date: Tue, 20 Apr 2010 19:27
33 lines
2308 bytes
2308 bytes
W dniu 20.04.2010 20:30, Łukasz 'Maly' Ostrowski pisze: > On Tue, 20 Apr 2010 20:09:30 +0200, Wiktor S. wrote: >> FPC obsługuje widestringi i unicodestringi, ale >> >> - plik źródłowy nie może być w UTF-16 >> - plik źródłowy może być w UTF-8, ale kompilator niestety nie zdekoduje >> znaków, więc przypisanie >> >> var s:unicodestring; >> s:='カタカナ'; > > Explicit deklaracja zmiennej "unicodestring" nie jest dla mnie > obsługą Unicode/UTF-8/etc ;-). string z .NET/String z Javy > jest ;-). OP ma za dużo naleciałości czasowych. > >> nie da tego co powinno (s będzie zawierało 'カタカăŠ'). Jedyne co się >> da to >> >> s:=#12459#12479#12459#12490; > > Kombinowanie, hacki i okolice, to też nie jest Unicode :). > >> - writeln tego na konsoli nie wyświetli. Nawet unicodestringa z polskimi >> literami prawidłowo nie wyświetla, gdyż przeprowadza konwersję na stronę >> kodową ANSI zamiast OEM. > > Noo własnie, to tylko kontynuacja poprzednij punktów. =]. Obsługuje > ale... nie :). > Dzięki za wskazówki. Aż sobie to chyba posprawdzam w wolnej chwili. Sławek
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Wiktor S.
Date: Thu, 22 Apr 2010 18:32
Date: Thu, 22 Apr 2010 18:32
10 lines
1388 bytes
1388 bytes
> Noo własnie, to tylko kontynuacja poprzednij punktów. =]. Obsługuje > ale... nie :). Interesujący art pracownika Microsoftu na temat unicode w konsoli: http://blogs.msdn.com/michkap/archive/2010/04/07/9989346.aspx -- Azarien
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Mirek
Date: Fri, 23 Apr 2010 16:43
Date: Fri, 23 Apr 2010 16:43
22 lines
1713 bytes
1713 bytes
On pon, 19 kwi 2010 23:35:42 in article news:<hqiifa$nri$1@news.mm.pl> Terrmit wrote: > Właściwie to już napisałem sobie podobnie działającą funkcję jak > ta ValidFileName, którą przytoczyłeś, choć jest trochę prostsza, > bo wyskrobałem ją na szybko: > > function NazwaPoprawna(const FileOrDir: string): Boolean; > var i: Integer; > const NOCHAR = ['\','/',':','*','?','"','<','>','|']; > begin > Result := True; > for i := 1 to Length(FileOrDir) do > if FileOrDir[i] in NOCHAR then begin > Result := False; Break; > end; > end; > > Program ma działać przede wszystkim w Linuksie, ale chciałbym > aby w przyszłości można go było uruchamiać także w Windows. Na linuksie jedyny znak zabroniony to: '/' + specjalne nazwy '.' oraz '..' ;)
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Terrmit
Date: Fri, 23 Apr 2010 17:25
Date: Fri, 23 Apr 2010 17:25
12 lines
1620 bytes
1620 bytes
W dniu 23.04.2010 18:43, Mirek pisze: [ciach] > Na linuksie jedyny znak zabroniony to: '/' + specjalne nazwy '.' oraz '..' > ;) Zgadza się, jednak wolę unikać jakichkolwiek znaków mogących sprawić problem w różnych systemach. Dzięki temu można też łatwo przekopiować całą strukturę katalogów na inny system. Dziękuję za zwrócenie uwagi na pojedynczą kropkę i dwie kropki. Małe są szanse, żeby taka nazwa wystąpiła, ale jak już robić sprawdzanie, to do końca ;) Sławek
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Grzegorz Skoczylas
Date: Fri, 23 Apr 2010 19:18
Date: Fri, 23 Apr 2010 19:18
45 lines
2591 bytes
2591 bytes
W dniu 2010-04-23 19:25, Terrmit pisze: > W dniu 23.04.2010 18:43, Mirek pisze: > [ciach] >> Na linuksie jedyny znak zabroniony to: '/' + specjalne nazwy '.' oraz >> '..' >> ;) > Zgadza się, jednak wolę unikać jakichkolwiek znaków mogących sprawić > problem w różnych systemach. Dzięki temu można też łatwo przekopiować > całą strukturę katalogów na inny system. > Dziękuję za zwrócenie uwagi na pojedynczą kropkę i dwie kropki. > Małe są szanse, żeby taka nazwa wystąpiła, ale jak już robić > sprawdzanie, to do końca ;) Jak do końca, to są, jak sądzę, jeszcze inne przypadki szczególne. Na przykład w czasach DOS w sposób szczególny traktowane były następujące nazwy plików: - com - aux1 - aux2 - prn - nul - lpt1 - lpt2 Pamiętam, że najprostszym sposobem sprawdzenia, czy pliki z dyskietki można odczytać, było wykonanie polecenia: COPY *.* NUL a wydrukowanie pliku tekstowego na drukarce można było zrealizować wykonując polecenie: COPY PLIK.TXT PRN Nie pamiętam, czy były jeszcze jakieś inne specjalne nazwy plików, ale przed chwilą sprawdziłem, że w Windows Vista w trybie znakowym powyższa instrukcja działa tak samo, jak w czasach DOS, czyli kopiuje pliki do "urządzenia pustego" czyli donikąd. -- Pozdrawiam, Grzegorz Skoczylas http://gskoczylas.rekord.pl ----------------------------------------------
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Grzegorz Skoczylas
Date: Fri, 23 Apr 2010 19:20
Date: Fri, 23 Apr 2010 19:20
18 lines
1992 bytes
1992 bytes
W dniu 2010-04-23 21:18, Grzegorz Skoczylas pisze:
> [...]
> przed chwilą sprawdziłem, że w Windows Vista w trybie znakowym powyższa
> instrukcja działa tak samo, jak w czasach DOS, czyli kopiuje pliki do
> "urządzenia pustego" czyli donikąd.
Chodziło mi w tym miejscu o instrukcję:
COPY *.* NUL
Przeredagowywałem trochę poprzedni list i nie zauważyłem tej pomyłki.
--
Pozdrawiam,
Grzegorz Skoczylas
http://gskoczylas.rekord.pl
----------------------------------------------
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Terrmit
Date: Sat, 24 Apr 2010 08:51
Date: Sat, 24 Apr 2010 08:51
39 lines
2366 bytes
2366 bytes
W dniu 23.04.2010 21:18, Grzegorz Skoczylas pisze: > W dniu 2010-04-23 19:25, Terrmit pisze: >> W dniu 23.04.2010 18:43, Mirek pisze: >> [ciach] >> Małe są szanse, żeby taka nazwa wystąpiła, ale jak już robić >> sprawdzanie, to do końca ;) > > Jak do końca, to są, jak sądzę, jeszcze inne przypadki szczególne. Na > przykład w czasach DOS w sposób szczególny traktowane były następujące > nazwy plików: > - com > - aux1 > - aux2 > - prn > - nul > - lpt1 > - lpt2 > > Pamiętam, że najprostszym sposobem sprawdzenia, czy pliki z dyskietki > można odczytać, było wykonanie polecenia: > > COPY *.* NUL > > a wydrukowanie pliku tekstowego na drukarce można było zrealizować > wykonując polecenie: > > COPY PLIK.TXT PRN > > Nie pamiętam, czy były jeszcze jakieś inne specjalne nazwy plików, ale > przed chwilą sprawdziłem, że w Windows Vista w trybie znakowym powyższa > instrukcja działa tak samo, jak w czasach DOS, czyli kopiuje pliki do > "urządzenia pustego" czyli donikąd. > Dzięki Faktycznie były i są takie nazwy wciąż w użyciu w Windows. Heh, ma ktoś jeszcze jakieś wyjątki? Może coś z systemów MacOS? Na makówkach się nie znam za bardzo, nie zażywam :) Sławek
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Wiktor S.
Date: Sun, 25 Apr 2010 10:34
Date: Sun, 25 Apr 2010 10:34
32 lines
1945 bytes
1945 bytes
> Jak do końca, to są, jak sądzę, jeszcze inne przypadki szczególne. Na > przykład w czasach DOS w sposób szczególny traktowane były następujące > nazwy plików: > - com > - aux1 > - aux2 > - prn > - nul > - lpt1 > - lpt2 trochę odwrotnie: aux com1 com2 gdzie aux z definicji równa się com1, a prn=lpt1. poza tym wcale nie "w czasach DOS". Spróbujcie pod Vistą zapisać notatnikiem plik o nazwie nul (nie nul.txt): | nul | Ta nazwa pliku jest zarezerwowana do użytku systemu Windows. Do tego lista nie jest zamknięta. W DOS-ie CD-ROM dostawał oprócz literki dysku także nazwę urządzenia, najczęściej CDROM01, ale można było wpisać dowolną --> bez aktywnego sprawdzenia listy tych urządzeń nie da się przewidzieć, czy nazwa pliku jest prawidłowa. -- Azarien
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Wiktor S.
Date: Sun, 25 Apr 2010 10:36
Date: Sun, 25 Apr 2010 10:36
12 lines
1629 bytes
1629 bytes
> Faktycznie były i są takie nazwy wciąż w użyciu w Windows. > Heh, ma ktoś jeszcze jakieś wyjątki? Może coś z systemów MacOS? > Na makówkach się nie znam za bardzo, nie zażywam :) W praktyce nie robi się aż tak dokładnego sprawdzania, tylko podstawowe - jeśli nazwa okaże się niepoprawna z jakiegoś egzotycznego powodu, program powinien po prostu wyświetlić stosowny komunikat (np. błąd zapisu). W myśl że ZAWSZE coś może pójść nie tak. -- Azarien
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Terrmit
Date: Sun, 25 Apr 2010 14:05
Date: Sun, 25 Apr 2010 14:05
36 lines
2802 bytes
2802 bytes
W dniu 25.04.2010 12:36, Wiktor S. pisze: >> Faktycznie były i są takie nazwy wciąż w użyciu w Windows. >> Heh, ma ktoś jeszcze jakieś wyjątki? Może coś z systemów MacOS? >> Na makówkach się nie znam za bardzo, nie zażywam :) > > W praktyce nie robi się aż tak dokładnego sprawdzania, tylko podstawowe > - jeśli nazwa okaże się niepoprawna z jakiegoś egzotycznego powodu, > program powinien po prostu wyświetlić stosowny komunikat (np. błąd zapisu). > W myśl że ZAWSZE coś może pójść nie tak. > > Wszystko prawda, Wystąpienie takich nazw jest mało prawdopodobne i zgadzam się, że "W praktyce nie robi się aż tak dokładnego sprawdzania", dlatego robienie takie sprawdzania to bardziej filozofia niż praktyka ;) Błąd (jaki by nie był) trzeba obsłużyć ręcznie lub za pomocą dodatkowego kodu. Obsługa ręczna jest nieefektywna (po to jest komputer, aby wyręczał człowieka), a dodatkowy kod ... tak czy siak jakiś trzeba wtedy napisać, aby program wykonał zadanie prawidłowo. Taka funkcja sprawdzająca dokładnie nazwę pliku/katalogu może być bardzo przydatna, a wpisanie paru dodatkowych linijek kodu teraz być może zaoszczędzi nerwów w przyszłości. Może nie jestem wybitnym programistą, ale zawsze staram się pisać programy tak, aby były możliwie "głupotoodporne" i aby jak najmniej wymagały od człowieka zwłaszcza że, ... sam zwykle je potem używam :) Ech, to są tematy na które można długo filozofować :) Wszystkim dzięki za wszelką pomoc i wskazówki :), Sławek
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Tomasz Minkiewicz
Date: Tue, 27 Apr 2010 16:15
Date: Tue, 27 Apr 2010 16:15
20 lines
1929 bytes
1929 bytes
On Fri, 23 Apr 2010 19:25:45 +0200 Terrmit <terrmitv@poczta.onet.pl> wrote: > W dniu 23.04.2010 18:43, Mirek pisze: > [ciach] > > Na linuksie jedyny znak zabroniony to: '/' + specjalne nazwy '.' oraz '..' > > ;) > Zgadza się, jednak wolę unikać jakichkolwiek znaków mogących sprawić > problem w różnych systemach. Dzięki temu można też łatwo przekopiować > całą strukturę katalogów na inny system. > Dziękuję za zwrócenie uwagi na pojedynczą kropkę i dwie kropki. > Małe są szanse, żeby taka nazwa wystąpiła, ale jak już robić > sprawdzanie, to do końca ;) A jakich stringów używasz? To nie jest intymne pytanie ;), tylko wskazówka, że pod Linuksem są DWA znaki zabronione w nazwach plików. Nie może jeszcze wystąpić #0. -- Tomasz Minkiewicz <tommink@gmail.com>
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Terrmit
Date: Wed, 28 Apr 2010 05:16
Date: Wed, 28 Apr 2010 05:16
34 lines
2737 bytes
2737 bytes
W dniu 27.04.2010 18:15, Tomasz Minkiewicz pisze: > On Fri, 23 Apr 2010 19:25:45 +0200 > Terrmit<terrmitv@poczta.onet.pl> wrote: > >> W dniu 23.04.2010 18:43, Mirek pisze: >> [ciach] >>> Na linuksie jedyny znak zabroniony to: '/' + specjalne nazwy '.' oraz '..' >>> ;) >> Zgadza się, jednak wolę unikać jakichkolwiek znaków mogących sprawić >> problem w różnych systemach. Dzięki temu można też łatwo przekopiować >> całą strukturę katalogów na inny system. >> Dziękuję za zwrócenie uwagi na pojedynczą kropkę i dwie kropki. >> Małe są szanse, żeby taka nazwa wystąpiła, ale jak już robić >> sprawdzanie, to do końca ;) > > A jakich stringów używasz? > To nie jest intymne pytanie ;), tylko wskazówka, że pod Linuksem są DWA > znaki zabronione w nazwach plików. Nie może jeszcze wystąpić #0. > Hmm, #0 to pewnie i w Windows nie przejdzie w nazwach plików, jak sądzę (nie sprawdzałem). Używam UTF-8, ale biorę pod uwagę, że dane źródłowe mogę otrzymać w ISO-8859-2 lub nawet windows-1250. Staram się wykryć rodzaj kodowania i wówczas przeprowadzić konwersję. Wystąpienie tam znaku #0 jest praktycznie niemożliwe chyba, że na skutek jakiegoś błędu. Pojawienie się źródła danych w UTF-16 mogłoby mi narobić problemów, ale będę się tym martwił, jak takie dostanę. Jeśli chodzi Ci o typ danych, to używam String, nie PChar. Wykrywanie, czy w tekście nie ma znaku #0 to mimo wszystko dobry pomysł. Może uchronić przed różnymi "dziwnymi" problemami. Dzięki, Sławek
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Tomasz Minkiewicz
Date: Wed, 28 Apr 2010 09:11
Date: Wed, 28 Apr 2010 09:11
45 lines
3061 bytes
3061 bytes
On Wed, 28 Apr 2010 07:16:21 +0200 Terrmit <terrmitv@poczta.onet.pl> wrote: > W dniu 27.04.2010 18:15, Tomasz Minkiewicz pisze: > > On Fri, 23 Apr 2010 19:25:45 +0200 > > Terrmit<terrmitv@poczta.onet.pl> wrote: > > > >> W dniu 23.04.2010 18:43, Mirek pisze: > >> [ciach] > >>> Na linuksie jedyny znak zabroniony to: '/' + specjalne nazwy '.' oraz '..' > >>> ;) > >> Zgadza się, jednak wolę unikać jakichkolwiek znaków mogących sprawić > >> problem w różnych systemach. Dzięki temu można też łatwo przekopiować > >> całą strukturę katalogów na inny system. > >> Dziękuję za zwrócenie uwagi na pojedynczą kropkę i dwie kropki. > >> Małe są szanse, żeby taka nazwa wystąpiła, ale jak już robić > >> sprawdzanie, to do końca ;) > > > > A jakich stringów używasz? > > To nie jest intymne pytanie ;), tylko wskazówka, że pod Linuksem są DWA > > znaki zabronione w nazwach plików. Nie może jeszcze wystąpić #0. > > > Hmm, #0 to pewnie i w Windows nie przejdzie w nazwach plików, jak > sądzę (nie sprawdzałem). Jak znam życie, to on założyć taki plik pozwoli, ale już nigdy więcej się nic z niego nie odczyta, ani drania nie usunie. Windows lubi takie dowcipy. ;> > Używam UTF-8, ale biorę pod uwagę, że dane źródłowe mogę otrzymać > w ISO-8859-2 lub nawet windows-1250. Staram się wykryć rodzaj > kodowania i wówczas przeprowadzić konwersję. > Wystąpienie tam znaku #0 jest praktycznie niemożliwe chyba, że > na skutek jakiegoś błędu. Masz na myśli, że wiesz, że w danych wejściowych ich nie będzie? Bo UTF-8 przed nim nie zabezpiecza. Całe dolne ASCII jest przecież w nim legalne. > Jeśli chodzi Ci o typ danych, to używam String, nie PChar. O to pytałem. Gdyby PChary, to sprawy by w ogóle nie było. -- Tomasz Minkiewicz <tommink@gmail.com>
Re: [Lazarus] Czy nazwa pliku jest poprawna?
Author: Grzegorz Skoczylas
Date: Wed, 28 Apr 2010 20:58
Date: Wed, 28 Apr 2010 20:58
30 lines
2430 bytes
2430 bytes
W dniu 2010-04-27 18:15, Tomasz Minkiewicz pisze: > On Fri, 23 Apr 2010 19:25:45 +0200 > Terrmit<terrmitv@poczta.onet.pl> wrote: > >> W dniu 23.04.2010 18:43, Mirek pisze: >> [ciach] >>> Na linuksie jedyny znak zabroniony to: '/' + specjalne nazwy '.' oraz '..' >>> ;) >> Zgadza się, jednak wolę unikać jakichkolwiek znaków mogących sprawić >> problem w różnych systemach. Dzięki temu można też łatwo przekopiować >> całą strukturę katalogów na inny system. >> Dziękuję za zwrócenie uwagi na pojedynczą kropkę i dwie kropki. >> Małe są szanse, żeby taka nazwa wystąpiła, ale jak już robić >> sprawdzanie, to do końca ;) > > A jakich stringów używasz? > To nie jest intymne pytanie ;), tylko wskazówka, że pod Linuksem są DWA > znaki zabronione w nazwach plików. Nie może jeszcze wystąpić #0. Skoro tak, to moim zdaniem należałoby odrzucić wszelkie znaki ze zbioru [#0..#31, #127]. Nie jestem pewien znaku o kodzie #255. W DOS chyba nie był dopuszczany w nazwie pliku. W Windows i innych systemach - nie jestem pewien. -- Pozdrawiam, Grzegorz Skoczylas http://gskoczylas.rekord.pl ----------------------------------------------
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads